home *** CD-ROM | disk | FTP | other *** search
/ Suzy B Software 2 / Suzy B Software CD-ROM 2 (1994).iso / extras / programm / a56 / src / gram.c < prev    next >
C/C++ Source or Header  |  1995-04-27  |  113KB  |  3,469 lines

  1.  
  2. /*  A Bison parser, made from a56.y with Bison version GNU Bison version 1.22
  3.   */
  4.  
  5. #define YYBISON 1  /* Identify Bison output.  */
  6.  
  7. #define    CHEX    258
  8. #define    CDEC    259
  9. #define    FRAC    260
  10. #define    AREG    261
  11. #define    BREG    262
  12. #define    MREG    263
  13. #define    NREG    264
  14. #define    RREG    265
  15. #define    XREG    266
  16. #define    YREG    267
  17. #define    OP    268
  18. #define    OPA    269
  19. #define    OPP    270
  20. #define    OP_JCC    271
  21. #define    OP_JSCC    272
  22. #define    OP_TCC    273
  23. #define    SYM    274
  24. #define    STRING    275
  25. #define    CHAR    276
  26. #define    XMEM    277
  27. #define    YMEM    278
  28. #define    LMEM    279
  29. #define    PMEM    280
  30. #define    AAAA    281
  31. #define    A10    282
  32. #define    BBBB    283
  33. #define    B10    284
  34. #define    AABB    285
  35. #define    BBAA    286
  36. #define    XXXX    287
  37. #define    YYYY    288
  38. #define    SR    289
  39. #define    MR    290
  40. #define    CCR    291
  41. #define    OMR    292
  42. #define    SP    293
  43. #define    SSH    294
  44. #define    SSL    295
  45. #define    LA    296
  46. #define    LC    297
  47. #define    EOL    298
  48. #define    EOS    299
  49. #define    LEXBAD    300
  50. #define    OP_ABS    301
  51. #define    OP_ADC    302
  52. #define    OP_ADD    303
  53. #define    OP_ADDL    304
  54. #define    OP_ADDR    305
  55. #define    OP_ASL    306
  56. #define    OP_ASR    307
  57. #define    OP_CLR    308
  58. #define    OP_CMP    309
  59. #define    OP_CMPM    310
  60. #define    OP_DIV    311
  61. #define    OP_MAC    312
  62. #define    OP_MACR    313
  63. #define    OP_MPY    314
  64. #define    OP_MPYR    315
  65. #define    OP_NEG    316
  66. #define    OP_NORM    317
  67. #define    OP_RND    318
  68. #define    OP_SBC    319
  69. #define    OP_SUB    320
  70. #define    OP_SUBL    321
  71. #define    OP_SUBR    322
  72. #define    OP_TFR    323
  73. #define    OP_TST    324
  74. #define    OP_AND    325
  75. #define    OP_ANDI    326
  76. #define    OP_EOR    327
  77. #define    OP_LSL    328
  78. #define    OP_LSR    329
  79. #define    OP_NOT    330
  80. #define    OP_OR    331
  81. #define    OP_ORI    332
  82. #define    OP_ROL    333
  83. #define    OP_ROR    334
  84. #define    OP_BCLR    335
  85. #define    OP_BSET    336
  86. #define    OP_BCHG    337
  87. #define    OP_BTST    338
  88. #define    OP_DO    339
  89. #define    OP_ENDDO    340
  90. #define    OP_LUA    341
  91. #define    OP_MOVE    342
  92. #define    OP_MOVEC    343
  93. #define    OP_MOVEM    344
  94. #define    OP_MOVEP    345
  95. #define    OP_ILLEGAL    346
  96. #define    OP_INCLUDE    347
  97. #define    OP_JMP    348
  98. #define    OP_JCLR    349
  99. #define    OP_JSET    350
  100. #define    OP_JSR    351
  101. #define    OP_JSCLR    352
  102. #define    OP_JSSET    353
  103. #define    OP_NOP    354
  104. #define    OP_REP    355
  105. #define    OP_RESET    356
  106. #define    OP_RTI    357
  107. #define    OP_RTS    358
  108. #define    OP_STOP    359
  109. #define    OP_SWI    360
  110. #define    OP_WAIT    361
  111. #define    OP_EQU    362
  112. #define    OP_ORG    363
  113. #define    OP_DC    364
  114. #define    OP_DS    365
  115. #define    OP_DSM    366
  116. #define    OP_END    367
  117. #define    OP_PAGE    368
  118. #define    OP_PSECT    369
  119. #define    OP_ALIGN    370
  120. #define    OP_INT    371
  121. #define    SHL    372
  122. #define    SHR    373
  123.  
  124. #line 1 "a56.y"
  125.  
  126. /*******************************************************
  127.  *
  128.  *  a56 - a DSP56001 assembler
  129.  *
  130.  *  Written by Quinn C. Jensen
  131.  *  July 1990
  132.  *
  133.  *******************************************************/
  134.  
  135. /*
  136.  * Copyright (C) 1990-1994 Quinn C. Jensen
  137.  *
  138.  * Permission to use, copy, modify, distribute, and sell this software
  139.  * and its documentation for any purpose is hereby granted without fee,
  140.  * provided that the above copyright notice appear in all copies and
  141.  * that both that copyright notice and this permission notice appear
  142.  * in supporting documentation.  The author makes no representations
  143.  * about the suitability of this software for any purpose.  It is
  144.  * provided "as is" without express or implied warranty.
  145.  *
  146.  */
  147.  
  148. /*
  149.  *  a56.y - The YACC grammar for the assembler.
  150.  *
  151.  *  Note:  This module requires a "BIG" version of YACC.  I had to
  152.  *  recompile YACC in the largest mode available.
  153.  *
  154.  *  Other notes:
  155.  *
  156.  *  MOVEC, MOVEM and MOVEP must be used explicitly--MOVE can't yet figure
  157.  *  out which form to use.
  158.  *
  159.  */
  160.  
  161. #include "a56.h"
  162.  
  163. unsigned int w0, w1;            /* workspace for the actual generated code */
  164. BOOL uses_w1;                    /* says whether w1 is alive */
  165. unsigned int pc;                /* current program counter */
  166. int seg;                        /* current segment P: X: Y: or L: */
  167.  
  168. int just_rep = 0;                /* keeps track of REP instruction */
  169. int substatement = 0;            /* in a substatement */
  170. BOOL long_symbolic_expr = FALSE; /* a parser flag */
  171. char *new_include = NULL;        /* file to be included */
  172.  
  173. /* listing stuff */
  174.  
  175. char segs[] = "PXYL";
  176. extern BOOL list_on_next;        /* listing to turn on or off */
  177. BOOL list_on;                    /* listing on at the moment */
  178. extern char *cur_line;            /* points to line being lex'd */
  179. char list_buf[1024 + 80];        /* listing buffer */
  180. char list_buf2[1024 + 80];        /* listing buffer for two-line code */
  181. BOOL uses_buf2 = FALSE;            /* list_buf2 is alive */
  182. BOOL list_print_line = FALSE;    /* whether or not to print line in listing */
  183. char *spaces(), *luntab();
  184.  
  185. struct n binary_op();
  186. struct n unary_op();
  187. struct n sym_ref();
  188.  
  189. #define R_R6                0x0001
  190. #define R_R5                0x0002
  191. #define R_R4                0x0004
  192. #define R_DATA_ALU_ACCUM    0x0008
  193. #define R_CTL_REG            0x0010
  194. #define R_FUNKY_CTL_REG        0x0020
  195. #define R_SDX                0x0040
  196. #define R_SDY                0x0080
  197. #define R_LSD                0x0100
  198. #define R_AB                0x0200
  199. #define R_XREG                0x0400
  200. #define R_YREG                0x0800
  201. /* registers to which short immediate move is an unsigned int */
  202. #define R_UINT                0x1000
  203. /* registers to which short immediate move is an signed frac */
  204. #define R_SFRAC                0x2000
  205.  
  206. #line 83 "a56.y"
  207. typedef union {
  208.     int ival;            /* integer value */
  209.     struct n n;            /* just like in struct sym */
  210.     double dval;        /* floating point value */
  211.     char *sval;            /* string */
  212.     int cval;            /* character */
  213.     char cond;            /* condition */
  214.     struct regs {
  215.         int r6, r5, r4, data_alu_accum, ctl_reg, funky_ctl_reg;
  216.         int sdx, sdy, lsd, ab, xreg, yreg;
  217.         int flags;
  218.     } regs;
  219.     struct ea {
  220.         int mode;
  221.         int ext;
  222.         int pp;
  223.     } ea;
  224. } YYSTYPE;
  225.  
  226. #ifndef YYLTYPE
  227. typedef
  228.   struct yyltype
  229.     {
  230.       int timestamp;
  231.       int first_line;
  232.       int first_column;
  233.       int last_line;
  234.       int last_column;
  235.       char *text;
  236.    }
  237.   yyltype;
  238.  
  239. #define YYLTYPE yyltype
  240. #endif
  241.  
  242. #include <stdio.h>
  243.  
  244. #ifndef __cplusplus
  245. #ifndef __STDC__
  246. #define const
  247. #endif
  248. #endif
  249.  
  250.  
  251.  
  252. #define    YYFINAL        539
  253. #define    YYFLAG        -32768
  254. #define    YYNTBASE    135
  255.  
  256. #define YYTRANSLATE(x) ((unsigned)(x) <= 373 ? yytranslate[x] : 208)
  257.  
  258. static const short yytranslate[] = {     0,
  259.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  260.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  261.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  262.      2,     2,     2,     2,   128,     2,   126,   121,     2,   131,
  263.    132,   124,   122,   130,   123,     2,   125,     2,     2,     2,
  264.      2,     2,     2,     2,     2,     2,     2,   129,     2,   133,
  265.      2,   134,     2,     2,     2,     2,     2,     2,     2,     2,
  266.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  267.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  268.      2,     2,     2,   120,     2,     2,     2,     2,     2,     2,
  269.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  270.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  271.      2,     2,     2,   119,     2,   127,     2,     2,     2,     2,
  272.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  273.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  274.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  275.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  276.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  277.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  278.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  279.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  280.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  281.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  282.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  283.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  284.      2,     2,     2,     2,     2,     1,     2,     3,     4,     5,
  285.      6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
  286.     16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
  287.     26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
  288.     36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
  289.     46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
  290.     56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
  291.     66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
  292.     76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
  293.     86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
  294.     96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
  295.    106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
  296.    116,   117,   118
  297. };
  298.  
  299. #if YYDEBUG != 0
  300. static const short yyprhs[] = {     0,
  301.      0,     1,     4,     7,    10,    13,    14,    16,    18,    21,
  302.     23,    27,    31,    34,    37,    44,    48,    55,    59,    63,
  303.     67,    76,    79,    81,    85,    87,    89,    91,    93,    95,
  304.     97,    99,   101,   102,   104,   105,   107,   109,   111,   114,
  305.    117,   120,   123,   126,   129,   132,   134,   137,   140,   143,
  306.    146,   149,   152,   155,   158,   161,   164,   167,   170,   173,
  307.    176,   179,   182,   185,   188,   191,   194,   197,   200,   203,
  308.    206,   211,   213,   215,   216,   220,   224,   228,   232,   236,
  309.    240,   244,   248,   252,   256,   260,   264,   268,   272,   274,
  310.    276,   280,   284,   286,   290,   294,   296,   298,   302,   306,
  311.    308,   310,   312,   314,   316,   318,   323,   326,   331,   336,
  312.    338,   340,   342,   344,   347,   350,   353,   356,   359,   362,
  313.    365,   368,   371,   374,   376,   378,   380,   382,   384,   386,
  314.    388,   390,   392,   396,   400,   405,   410,   415,   417,   419,
  315.    422,   425,   428,   435,   441,   443,   445,   447,   449,   452,
  316.    455,   458,   461,   466,   470,   472,   474,   476,   479,   482,
  317.    485,   490,   493,   495,   500,   504,   508,   513,   518,   522,
  318.    527,   532,   536,   542,   547,   553,   559,   564,   569,   571,
  319.    573,   575,   580,   585,   587,   589,   591,   593,   595,   597,
  320.    599,   601,   603,   605,   609,   615,   620,   626,   632,   637,
  321.    642,   644,   646,   648,   650,   652,   654,   656,   658,   660,
  322.    662,   664,   666,   668,   670,   672,   674,   676,   678,   680,
  323.    682,   684,   686,   688,   690,   692,   694,   696,   698,   700,
  324.    702,   704,   706,   708,   710,   714,   718,   720,   725,   730,
  325.    735,   740,   744,   752,   759,   767,   775,   782,   790,   795,
  326.    800,   805,   810,   819,   828,   837,   846,   848,   850,   852,
  327.    855,   859,   863,   865,   868,   871,   873,   875,   877,   879,
  328.    881,   883,   885,   890,   894,   898,   902,   906,   910,   914,
  329.    918,   922,   926,   930,   933,   936,   940
  330. };
  331.  
  332. static const short yyrhs[] = {    -1,
  333.    135,   136,     0,   137,    43,     0,   137,    44,     0,     1,
  334.     43,     0,     0,   138,     0,   139,     0,   143,   145,     0,
  335.     19,     0,   128,   199,    20,     0,    19,   107,   207,     0,
  336.    115,   207,     0,   114,    19,     0,   114,    19,   142,   207,
  337.    129,   207,     0,   108,   142,   207,     0,   108,   142,   207,
  338.    130,   142,   207,     0,   143,   109,   140,     0,   143,   110,
  339.    207,     0,   144,   111,   207,     0,   113,   199,   130,   199,
  340.    130,   199,   130,   199,     0,    92,    20,     0,   112,     0,
  341.    140,   130,   141,     0,   141,     0,    20,     0,   207,     0,
  342.     25,     0,    22,     0,    23,     0,    24,     0,    19,     0,
  343.      0,    19,     0,     0,   146,     0,   160,     0,   147,     0,
  344.    147,   190,     0,    59,   148,     0,    60,   148,     0,    57,
  345.    148,     0,    58,   148,     0,    65,   151,     0,    48,   151,
  346.      0,    87,     0,    68,   152,     0,    54,   152,     0,    55,
  347.    152,     0,    63,   153,     0,    49,   153,     0,    53,   153,
  348.      0,    66,   153,     0,    75,   153,     0,    50,   154,     0,
  349.     69,   154,     0,    67,   154,     0,    70,   155,     0,    76,
  350.    155,     0,    72,   155,     0,    52,   156,     0,    74,   156,
  351.      0,    46,   156,     0,    79,   156,     0,    51,   157,     0,
  352.     73,   157,     0,    61,   157,     0,    78,   157,     0,    47,
  353.    158,     0,    64,   158,     0,   149,   150,   130,   159,     0,
  354.    122,     0,   123,     0,     0,    11,   130,    11,     0,    12,
  355.    130,    12,     0,    11,   130,    12,     0,    12,   130,    11,
  356.      0,    28,   130,    26,     0,    26,   130,    28,     0,    32,
  357.    130,   159,     0,    33,   130,   159,     0,    11,   130,   159,
  358.      0,    12,   130,   159,     0,    28,   130,    26,     0,    26,
  359.    130,    28,     0,    11,   130,   159,     0,    12,   130,   159,
  360.      0,    26,     0,    28,     0,    28,   130,    26,     0,    26,
  361.    130,    28,     0,   153,     0,    11,   130,   159,     0,    12,
  362.    130,   159,     0,   159,     0,   159,     0,    32,   130,   159,
  363.      0,    33,   130,   159,     0,    26,     0,    28,     0,   164,
  364.      0,   169,     0,   172,     0,   161,     0,    62,    10,   130,
  365.    159,     0,    56,   175,     0,   162,   200,   130,   189,     0,
  366.    163,   200,   130,   189,     0,    76,     0,    77,     0,    70,
  367.      0,    71,     0,    17,   183,     0,    16,   183,     0,    96,
  368.    183,     0,    93,   183,     0,    98,   167,     0,    97,   167,
  369.      0,    95,   167,     0,    94,   167,     0,   100,   166,     0,
  370.     84,   165,     0,    85,     0,   104,     0,   106,     0,   101,
  371.      0,   103,     0,   105,     0,    91,     0,   102,     0,    99,
  372.      0,   200,   130,   202,     0,   187,   130,   202,     0,   181,
  373.    185,   130,   202,     0,   181,   203,   130,   202,     0,   181,
  374.    202,   130,   202,     0,   200,     0,   187,     0,   181,   185,
  375.      0,   181,   202,     0,   181,   203,     0,   180,   130,   181,
  376.    168,   130,   202,     0,   180,   130,   187,   130,   202,     0,
  377.    202,     0,   203,     0,   204,     0,   185,     0,    83,   170,
  378.      0,    82,   170,     0,    81,   170,     0,    80,   170,     0,
  379.    180,   130,   181,   171,     0,   180,   130,   187,     0,   204,
  380.      0,   203,     0,   184,     0,    90,   177,     0,    89,   179,
  381.      0,    88,   176,     0,    86,   186,   130,   187,     0,    18,
  382.    173,     0,   174,     0,   174,    10,   130,    10,     0,   187,
  383.    130,   187,     0,   187,   130,   187,     0,   181,   184,   130,
  384.    187,     0,   187,   130,   181,   184,     0,   200,   130,   187,
  385.      0,   181,   203,   130,   187,     0,   187,   130,   181,   203,
  386.      0,   187,   130,   187,     0,   181,   178,   130,   181,   178,
  387.      0,   200,   130,   181,   205,     0,    25,   184,   130,   181,
  388.    205,     0,   181,   178,   130,    25,   184,     0,   187,   130,
  389.    181,   205,     0,   181,   178,   130,   187,     0,   202,     0,
  390.    204,     0,   185,     0,   187,   130,    25,   182,     0,    25,
  391.    182,   130,   187,     0,   200,     0,    22,     0,    23,     0,
  392.    184,     0,   203,     0,   184,     0,   203,     0,   202,     0,
  393.    185,     0,   186,     0,   131,    10,   132,     0,   131,    10,
  394.    122,     9,   132,     0,   123,   131,    10,   132,     0,   131,
  395.     10,   132,   123,     9,     0,   131,    10,   132,   122,     9,
  396.      0,   131,    10,   132,   123,     0,   131,    10,   132,   122,
  397.      0,    11,     0,    12,     0,     6,     0,     7,     0,    26,
  398.      0,    28,     0,    10,     0,     9,     0,     8,     0,   188,
  399.      0,    27,     0,    29,     0,    32,     0,    33,     0,    30,
  400.      0,    31,     0,    34,     0,    37,     0,    38,     0,    39,
  401.      0,    40,     0,    41,     0,    42,     0,    35,     0,    36,
  402.      0,    37,     0,   191,     0,   193,     0,   194,     0,   195,
  403.      0,   196,     0,   192,     0,   198,     0,   197,     0,   200,
  404.    130,   187,     0,   187,   130,   187,     0,   186,     0,   181,
  405.    184,   130,   187,     0,   181,   203,   130,   187,     0,   187,
  406.    130,   181,   184,     0,   187,   130,   181,   203,     0,   201,
  407.    130,   187,     0,   181,   184,   130,   187,   187,   130,    12,
  408.      0,   200,   130,   187,   187,   130,    12,     0,   187,   130,
  409.    181,   184,   187,   130,   187,     0,   187,   130,   187,    23,
  410.    184,   130,   187,     0,   187,   130,   187,   200,   130,   187,
  411.      0,   187,   130,   187,   187,   130,    23,   184,     0,    24,
  412.    184,   130,   187,     0,   187,   130,    24,   184,     0,    24,
  413.    203,   130,   187,     0,   187,   130,    24,   203,     0,   181,
  414.    184,   130,   187,    23,   184,   130,   187,     0,   181,   184,
  415.    130,   187,   187,   130,    23,   184,     0,   187,   130,   181,
  416.    184,    23,   184,   130,   187,     0,   187,   130,   181,   184,
  417.    187,   130,    23,   184,     0,     3,     0,     4,     0,     5,
  418.      0,   128,   207,     0,   128,   133,   207,     0,   128,   134,
  419.    207,     0,   207,     0,   133,   207,     0,   117,   207,     0,
  420.    199,     0,    19,     0,   204,     0,   199,     0,    19,     0,
  421.     21,     0,   124,     0,   116,   131,   207,   132,     0,   207,
  422.    119,   207,     0,   207,   120,   207,     0,   207,   121,   207,
  423.      0,   207,   118,   207,     0,   207,   117,   207,     0,   207,
  424.    123,   207,     0,   207,   122,   207,     0,   207,   126,   207,
  425.      0,   207,   125,   207,     0,   207,   124,   207,     0,   123,
  426.    207,     0,   127,   207,     0,   131,   207,   132,     0,   206,
  427.      0
  428. };
  429.  
  430. #endif
  431.  
  432. #if YYDEBUG != 0
  433. static const short yyrline[] = { 0,
  434.    242,   243,   247,   265,   285,   290,   292,   294,   296,   316,
  435.    326,   335,   347,   361,   375,   381,   388,   395,   396,   399,
  436.    413,   417,   425,   432,   433,   437,   454,   465,   467,   469,
  437.    471,   476,   479,   483,   484,   488,   494,   495,   497,   503,
  438.    506,   508,   510,   513,   515,   517,   520,   522,   524,   527,
  439.    529,   531,   533,   535,   538,   540,   542,   545,   547,   549,
  440.    552,   554,   556,   558,   561,   563,   565,   567,   570,   572,
  441.    576,   581,   583,   585,   590,   599,   608,   615,   624,   626,
  442.    628,   630,   632,   634,   638,   640,   642,   644,   648,   650,
  443.    652,   654,   658,   662,   664,   668,   672,   676,   678,   682,
  444.    684,   689,   692,   693,   694,   700,   702,   704,   706,   710,
  445.    711,   714,   715,   721,   727,   733,   739,   746,   748,   750,
  446.    752,   755,   757,   759,   761,   763,   765,   767,   769,   771,
  447.    773,   775,   780,   787,   790,   793,   798,   806,   812,   814,
  448.    816,   821,   829,   833,   840,   856,   862,   868,   875,   877,
  449.    879,   881,   886,   888,   893,   899,   905,   912,   913,   914,
  450.    915,   917,   922,   924,   928,   942,   951,   959,   967,   977,
  451.    988,   999,  1014,  1043,  1049,  1052,  1057,  1061,  1069,  1081,
  452.   1087,  1094,  1096,  1103,  1109,  1111,  1117,  1119,  1126,  1128,
  453.   1135,  1140,  1146,  1148,  1150,  1153,  1158,  1161,  1164,  1166,
  454.   1172,  1177,  1182,  1195,  1205,  1211,  1217,  1221,  1225,  1230,
  455.   1235,  1238,  1241,  1244,  1247,  1250,  1256,  1258,  1260,  1262,
  456.   1264,  1266,  1268,  1273,  1275,  1277,  1284,  1285,  1286,  1287,
  457.   1288,  1289,  1290,  1291,  1294,  1331,  1344,  1349,  1356,  1365,
  458.   1372,  1381,  1392,  1399,  1408,  1427,  1434,  1443,  1461,  1467,
  459.   1473,  1482,  1493,  1509,  1521,  1533,  1549,  1551,  1553,  1557,
  460.   1559,  1565,  1570,  1575,  1580,  1585,  1587,  1589,  1594,  1596,
  461.   1598,  1600,  1605,  1612,  1614,  1616,  1618,  1620,  1622,  1624,
  462.   1626,  1628,  1630,  1632,  1634,  1636,  1638
  463. };
  464.  
  465. static const char * const yytname[] = {   "$","error","$illegal.","CHEX","CDEC",
  466. "FRAC","AREG","BREG","MREG","NREG","RREG","XREG","YREG","OP","OPA","OPP","OP_JCC",
  467. "OP_JSCC","OP_TCC","SYM","STRING","CHAR","XMEM","YMEM","LMEM","PMEM","AAAA",
  468. "A10","BBBB","B10","AABB","BBAA","XXXX","YYYY","SR","MR","CCR","OMR","SP","SSH",
  469. "SSL","LA","LC","EOL","EOS","LEXBAD","OP_ABS","OP_ADC","OP_ADD","OP_ADDL","OP_ADDR",
  470. "OP_ASL","OP_ASR","OP_CLR","OP_CMP","OP_CMPM","OP_DIV","OP_MAC","OP_MACR","OP_MPY",
  471. "OP_MPYR","OP_NEG","OP_NORM","OP_RND","OP_SBC","OP_SUB","OP_SUBL","OP_SUBR",
  472. "OP_TFR","OP_TST","OP_AND","OP_ANDI","OP_EOR","OP_LSL","OP_LSR","OP_NOT","OP_OR",
  473. "OP_ORI","OP_ROL","OP_ROR","OP_BCLR","OP_BSET","OP_BCHG","OP_BTST","OP_DO","OP_ENDDO",
  474. "OP_LUA","OP_MOVE","OP_MOVEC","OP_MOVEM","OP_MOVEP","OP_ILLEGAL","OP_INCLUDE",
  475. "OP_JMP","OP_JCLR","OP_JSET","OP_JSR","OP_JSCLR","OP_JSSET","OP_NOP","OP_REP",
  476. "OP_RESET","OP_RTI","OP_RTS","OP_STOP","OP_SWI","OP_WAIT","OP_EQU","OP_ORG",
  477. "OP_DC","OP_DS","OP_DSM","OP_END","OP_PAGE","OP_PSECT","OP_ALIGN","OP_INT","SHL",
  478. "SHR","'|'","'^'","'&'","'+'","'-'","'*'","'/'","'%'","'~'","'#'","':'","','",
  479. "'('","')'","'<'","'>'","input","statement","good_stuff","cpp_droppings","assembler_ops",
  480. "dc_list","dc_stuff","space","label_field","opt_label","operation_field","operation",
  481. "parallel_ok","mpy_arg","plus_minus","mpy_srcs","op8_1","op8_2","op8_3","op8_4",
  482. "op8_5","op8_6","op8_7","op8_8","a_b","no_parallel","arith_inst","or_op","and_op",
  483. "control_inst","do_args","rep_args","control_args","p6_ean_a6","bit_inst","bit_args",
  484. "p6_ea_a6","move_inst","tcc_args","tcc_sd","sd3","movec_args","movep_args","movep_ea_pp",
  485. "movem_args","b5_10111_max","x_or_y","ea_a6","ea_a12","ea","ea_no_ext","ea_short",
  486. "regs","prog_ctl_reg","funky_ctl_reg","parallel_move","i_move","r_move","u_move",
  487. "x_or_y_move","xr_move","ry_move","l_move","xy_move","num","ix","ix_long","abs_addr",
  488. "abs_short_addr","io_short_addr","num_or_sym","num_or_sym_expr","expr",""
  489. };
  490. #endif
  491.  
  492. static const short yyr1[] = {     0,
  493.    135,   135,   136,   136,   136,   137,   137,   137,   137,   137,
  494.    138,   139,   139,   139,   139,   139,   139,   139,   139,   139,
  495.    139,   139,   139,   140,   140,   141,   141,   142,   142,   142,
  496.    142,   143,   143,   144,   144,   145,   146,   146,   146,   147,
  497.    147,   147,   147,   147,   147,   147,   147,   147,   147,   147,
  498.    147,   147,   147,   147,   147,   147,   147,   147,   147,   147,
  499.    147,   147,   147,   147,   147,   147,   147,   147,   147,   147,
  500.    148,   149,   149,   149,   150,   150,   150,   150,   151,   151,
  501.    151,   151,   151,   151,   152,   152,   152,   152,   153,   153,
  502.    153,   153,   154,   155,   155,   156,   157,   158,   158,   159,
  503.    159,   160,   160,   160,   160,   161,   161,   161,   161,   162,
  504.    162,   163,   163,   164,   164,   164,   164,   164,   164,   164,
  505.    164,   164,   164,   164,   164,   164,   164,   164,   164,   164,
  506.    164,   164,   165,   165,   165,   165,   165,   166,   166,   166,
  507.    166,   166,   167,   167,   168,   168,   168,   168,   169,   169,
  508.    169,   169,   170,   170,   171,   171,   171,   172,   172,   172,
  509.    172,   172,   173,   173,   174,   175,   176,   176,   176,   176,
  510.    176,   176,   177,   177,   177,   177,   177,   177,   178,   178,
  511.    178,   179,   179,   180,   181,   181,   182,   182,   183,   183,
  512.    184,   184,   185,   185,   185,   185,   186,   186,   186,   186,
  513.    187,   187,   187,   187,   187,   187,   187,   187,   187,   187,
  514.    187,   187,   187,   187,   187,   187,   188,   188,   188,   188,
  515.    188,   188,   188,   189,   189,   189,   190,   190,   190,   190,
  516.    190,   190,   190,   190,   191,   192,   193,   194,   194,   194,
  517.    194,   194,   195,   195,   195,   196,   196,   196,   197,   197,
  518.    197,   197,   198,   198,   198,   198,   199,   199,   199,   200,
  519.    200,   201,   202,   203,   204,   205,   205,   205,   206,   206,
  520.    206,   206,   207,   207,   207,   207,   207,   207,   207,   207,
  521.    207,   207,   207,   207,   207,   207,   207
  522. };
  523.  
  524. static const short yyr2[] = {     0,
  525.      0,     2,     2,     2,     2,     0,     1,     1,     2,     1,
  526.      3,     3,     2,     2,     6,     3,     6,     3,     3,     3,
  527.      8,     2,     1,     3,     1,     1,     1,     1,     1,     1,
  528.      1,     1,     0,     1,     0,     1,     1,     1,     2,     2,
  529.      2,     2,     2,     2,     2,     1,     2,     2,     2,     2,
  530.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  531.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  532.      4,     1,     1,     0,     3,     3,     3,     3,     3,     3,
  533.      3,     3,     3,     3,     3,     3,     3,     3,     1,     1,
  534.      3,     3,     1,     3,     3,     1,     1,     3,     3,     1,
  535.      1,     1,     1,     1,     1,     4,     2,     4,     4,     1,
  536.      1,     1,     1,     2,     2,     2,     2,     2,     2,     2,
  537.      2,     2,     2,     1,     1,     1,     1,     1,     1,     1,
  538.      1,     1,     3,     3,     4,     4,     4,     1,     1,     2,
  539.      2,     2,     6,     5,     1,     1,     1,     1,     2,     2,
  540.      2,     2,     4,     3,     1,     1,     1,     2,     2,     2,
  541.      4,     2,     1,     4,     3,     3,     4,     4,     3,     4,
  542.      4,     3,     5,     4,     5,     5,     4,     4,     1,     1,
  543.      1,     4,     4,     1,     1,     1,     1,     1,     1,     1,
  544.      1,     1,     1,     3,     5,     4,     5,     5,     4,     4,
  545.      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
  546.      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
  547.      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
  548.      1,     1,     1,     1,     3,     3,     1,     4,     4,     4,
  549.      4,     3,     7,     6,     7,     7,     6,     7,     4,     4,
  550.      4,     4,     8,     8,     8,     8,     1,     1,     1,     2,
  551.      3,     3,     1,     2,     2,     1,     1,     1,     1,     1,
  552.      1,     1,     4,     3,     3,     3,     3,     3,     3,     3,
  553.      3,     3,     3,     2,     2,     3,     1
  554. };
  555.  
  556. static const short yydefact[] = {     1,
  557.      0,     0,    32,     0,     0,    23,     0,     0,     0,     0,
  558.      2,     0,     7,     8,     0,     0,     5,     0,    22,    29,
  559.     30,    31,    28,     0,   257,   258,   259,     0,    14,   270,
  560.    271,     0,     0,   272,     0,     0,   269,   287,    13,     0,
  561.      3,     4,     0,     0,     0,     0,     0,     0,     0,     0,
  562.      0,     0,     0,     0,     0,     0,    74,    74,    74,    74,
  563.      0,     0,     0,     0,     0,     0,     0,     0,     0,   112,
  564.    113,     0,     0,     0,     0,   110,   111,     0,     0,     0,
  565.      0,     0,     0,     0,   124,     0,    46,     0,     0,     0,
  566.    130,     0,     0,     0,     0,     0,     0,   132,     0,   127,
  567.    131,   128,   125,   129,   126,     0,     0,     9,    36,    38,
  568.     37,   105,     0,     0,   102,   103,   104,     0,    12,    16,
  569.      0,     0,     0,   284,   285,     0,     0,     0,     0,     0,
  570.      0,     0,     0,     0,     0,     0,    11,     0,     0,     0,
  571.    115,   189,   192,   193,   191,   190,   263,   114,   203,   204,
  572.    209,   208,   207,   201,   202,   205,   211,   206,   212,   215,
  573.    216,   213,   214,   217,   218,   219,   220,   221,   222,   223,
  574.    162,   163,     0,   210,   100,   101,    63,    96,     0,     0,
  575.     69,     0,     0,     0,     0,     0,     0,    45,    89,    90,
  576.     51,    93,    55,    65,    97,    61,    52,     0,     0,     0,
  577.      0,    48,    49,   107,     0,    72,    73,    42,     0,    43,
  578.     40,    41,    67,     0,    50,    70,    44,    53,    57,    47,
  579.     56,     0,     0,    58,    60,    66,    62,    54,    59,    68,
  580.     64,     0,   152,     0,   184,   151,   150,   149,   185,   186,
  581.    123,     0,     0,     0,     0,     0,   160,     0,     0,     0,
  582.      0,   159,     0,     0,   158,     0,     0,     0,   117,   121,
  583.      0,   120,   116,   119,   118,   122,     0,   139,   138,    26,
  584.     18,    25,    27,    19,     0,     0,     0,   237,     0,    39,
  585.    227,   232,   228,   229,   230,   231,   234,   233,     0,     0,
  586.      0,     0,    20,     0,     0,     0,     0,   286,   278,   277,
  587.    274,   275,   276,   280,   279,   283,   282,   281,     0,     0,
  588.    264,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  589.      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  590.      0,     0,     0,     0,     0,   260,     0,     0,     0,     0,
  591.      0,     0,     0,     0,     0,     0,     0,     0,     0,   187,
  592.    188,     0,     0,     0,     0,   181,   179,   180,     0,     0,
  593.      0,   140,   141,   142,     0,     0,     0,     0,     0,     0,
  594.      0,     0,     0,     0,     0,     0,     0,     0,   273,     0,
  595.      0,   194,     0,   165,    98,    99,    83,    84,    80,    79,
  596.     81,    82,    92,    91,    87,    88,    86,    85,   166,     0,
  597.      0,     0,   106,    94,    95,   261,     0,   154,     0,     0,
  598.      0,   134,   133,     0,   161,     0,     0,     0,   172,   169,
  599.      0,     0,     0,   265,     0,     0,     0,     0,     0,    24,
  600.      0,     0,   262,     0,     0,     0,     0,   236,   235,   242,
  601.    224,   225,   226,   108,   109,    17,     0,    15,   196,     0,
  602.    200,   199,   164,    75,    77,    78,    76,    71,   153,   157,
  603.    156,   155,   135,   137,   136,   167,   170,   168,   171,   183,
  604.    182,     0,     0,     0,   178,   267,   266,   268,   177,   174,
  605.      0,   148,   145,   146,   147,     0,   249,   251,   238,   239,
  606.    250,   252,   240,   241,     0,     0,     0,     0,     0,   195,
  607.    198,   197,   175,   176,   173,     0,   144,     0,     0,     0,
  608.      0,     0,     0,     0,     0,    21,   143,     0,     0,     0,
  609.      0,     0,     0,   247,   244,     0,   243,     0,     0,     0,
  610.    245,   246,   248,   253,   254,   255,   256,     0,     0
  611. };
  612.  
  613. static const short yydefgoto[] = {     1,
  614.     11,    12,    13,    14,   271,   272,    24,    15,    16,   108,
  615.    109,   110,   208,   209,   331,   188,   202,   192,   193,   224,
  616.    177,   194,   181,   178,   111,   112,   113,   114,   115,   241,
  617.    266,   260,   481,   116,   233,   459,   117,   171,   172,   204,
  618.    247,   255,   355,   252,   234,   242,   349,   141,   142,   143,
  619.    144,   173,   174,   444,   280,   281,   282,   283,   284,   285,
  620.    286,   287,   288,    37,   235,   290,   145,   146,   478,   479,
  621.     38,   147
  622. };
  623.  
  624. static const short yypact[] = {-32768,
  625.    461,   -39,   -24,    -5,    72,-32768,   138,    24,   607,   138,
  626. -32768,    23,-32768,-32768,   900,   -63,-32768,   607,-32768,-32768,
  627. -32768,-32768,-32768,   607,-32768,-32768,-32768,   -31,    72,-32768,
  628. -32768,   -55,   607,-32768,   607,   607,-32768,-32768,   975,   118,
  629. -32768,-32768,   105,   105,  1190,    74,    59,   158,    79,    79,
  630.     74,    74,    79,    -2,    -2,  1190,   -11,   -11,   -11,   -11,
  631.     74,   115,    79,    59,   158,    79,    79,    -2,    79,   104,
  632. -32768,   104,    74,    74,    79,   104,-32768,    74,    74,    31,
  633.     31,    31,    31,   780,-32768,    32,-32768,   780,   894,   743,
  634. -32768,   105,    31,    31,   105,    31,    31,-32768,   780,-32768,
  635. -32768,-32768,-32768,-32768,-32768,   221,   607,-32768,-32768,   633,
  636. -32768,-32768,    31,    31,-32768,-32768,-32768,   607,   975,   559,
  637.    138,   607,   607,-32768,-32768,   284,   607,   607,   607,   607,
  638.    607,   607,   607,   607,   607,   607,-32768,   612,   478,   607,
  639. -32768,-32768,-32768,-32768,-32768,-32768,   975,-32768,-32768,-32768,
  640. -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  641. -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  642. -32768,   161,    48,-32768,-32768,-32768,-32768,-32768,    57,    73,
  643. -32768,    77,    80,    92,    97,   100,   107,-32768,   109,   113,
  644. -32768,-32768,-32768,-32768,-32768,-32768,-32768,   128,   130,   131,
  645.    134,-32768,-32768,-32768,   137,-32768,-32768,-32768,   163,-32768,
  646. -32768,-32768,-32768,   141,-32768,-32768,-32768,-32768,-32768,-32768,
  647. -32768,   143,   145,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  648. -32768,   305,-32768,   146,-32768,-32768,-32768,-32768,-32768,-32768,
  649. -32768,   105,   154,   167,   258,   170,-32768,   105,   172,   176,
  650.    105,-32768,   181,   617,-32768,   574,   182,   183,-32768,-32768,
  651.    184,-32768,-32768,-32768,-32768,-32768,   105,-32768,-32768,-32768,
  652.    185,-32768,   975,   975,   105,    49,   105,-32768,   186,-32768,
  653. -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   190,   192,
  654.    193,   195,   975,    72,   197,   713,   326,-32768,    -3,    -3,
  655.    271,    71,     9,    42,    42,-32768,-32768,-32768,   587,   -99,
  656.    975,   198,  1190,    74,    74,    74,    74,   242,   303,    74,
  657.     74,   302,   306,    74,    74,   307,   312,  1190,   203,   209,
  658.    210,    74,    74,    74,   607,   975,  1042,   216,   217,   220,
  659.    607,   607,   219,  1190,   223,   225,  1042,  1190,   228,-32768,
  660. -32768,   317,   229,   607,   230,-32768,-32768,-32768,   212,   212,
  661.   1042,-32768,-32768,-32768,   221,   231,   235,   607,   238,   239,
  662.    854,  1190,  1190,   111,   111,   607,   138,   607,-32768,   232,
  663.    363,   127,   364,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  664. -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   234,
  665.    240,    74,-32768,-32768,-32768,   975,    85,-32768,   607,   607,
  666.    607,-32768,-32768,   127,-32768,  1190,  1190,   105,-32768,-32768,
  667.   1190,   105,   212,   975,  1005,    60,    60,    85,   245,-32768,
  668.   1190,  1190,   975,  1190,  1190,   105,   105,   817,  1190,-32768,
  669. -32768,-32768,-32768,-32768,-32768,   975,   249,   975,-32768,   250,
  670.    374,   377,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  671. -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  672. -32768,    60,   617,   574,-32768,-32768,-32768,-32768,-32768,-32768,
  673.    269,-32768,-32768,-32768,-32768,   607,-32768,-32768,  1079,-32768,
  674. -32768,-32768,  1116,-32768,   617,   281,   283,   285,   138,-32768,
  675. -32768,-32768,-32768,-32768,-32768,   607,-32768,   617,   287,   617,
  676.    288,   292,   391,  1190,   412,-32768,-32768,   295,    63,   296,
  677.   1153,  1190,   617,-32768,-32768,  1190,-32768,   617,  1190,   617,
  678. -32768,-32768,-32768,-32768,-32768,-32768,-32768,   430,-32768
  679. };
  680.  
  681. static const short yypgoto[] = {-32768,
  682. -32768,-32768,-32768,-32768,-32768,    66,   -28,-32768,-32768,-32768,
  683. -32768,-32768,   140,-32768,-32768,   369,    -8,    64,   112,   -65,
  684.     19,     0,   373,   -29,-32768,-32768,-32768,-32768,-32768,-32768,
  685. -32768,   123,-32768,-32768,   132,-32768,-32768,-32768,-32768,-32768,
  686. -32768,-32768,   -34,-32768,   -12,   -82,    33,   -23,  -174,  -217,
  687.    -81,   -54,-32768,    78,-32768,-32768,-32768,-32768,-32768,-32768,
  688. -32768,-32768,-32768,    -7,   -72,-32768,  -205,     5,  -243,  -413,
  689. -32768,    22
  690. };
  691.  
  692.  
  693. #define    YYLAST        1232
  694.  
  695.  
  696. static const short yytable[] = {    28,
  697.    122,   205,    40,    17,   246,   248,   225,   256,   198,   199,
  698.    229,   244,   358,   480,    19,   250,   267,   258,   -10,   -10,
  699.    148,   195,   381,   200,   338,   201,   269,   277,   278,   243,
  700.     39,   195,   382,   249,   253,   257,   339,   289,   356,   119,
  701.    291,   292,    29,   195,   268,   120,   203,   118,   195,   362,
  702.    357,    25,    26,    27,   124,   279,   125,   126,   503,   220,
  703.    213,   363,    25,    26,    27,    41,    42,    30,   259,    31,
  704.    196,   263,   226,   345,   527,   123,   350,   230,   476,   353,
  705.    261,   261,    18,   261,   261,   528,   -34,    25,    26,    27,
  706.    179,   180,   227,    20,    21,    22,    23,   231,   121,   175,
  707.    366,   176,   369,    30,   189,    31,   190,    25,    26,    27,
  708.    206,   207,   191,   295,   222,   223,   197,   131,   132,   133,
  709.    134,   135,   136,    30,   214,    31,   215,   273,   274,   218,
  710.    132,   133,   134,   135,   136,   412,   413,   137,   228,   293,
  711.     25,    26,    27,   296,   297,   441,   442,   443,   299,   300,
  712.    301,   302,   303,   304,   305,   306,   307,   308,   232,   124,
  713.    126,   311,   245,   462,    32,   134,   135,   136,   182,   183,
  714.    312,    33,    34,   329,   330,    35,   354,   313,   219,    36,
  715.    221,   335,   368,   184,   485,   185,   314,   127,   128,   186,
  716.    187,   131,   132,   133,   134,   135,   136,   210,   211,   212,
  717.     32,   354,   315,   463,   464,   465,   316,   138,    34,   317,
  718.    482,    35,   236,   237,   238,   139,   262,   140,   264,   265,
  719.     32,   318,   483,    25,    26,    27,   319,   138,    34,   320,
  720.    358,    35,   460,   239,   240,   139,   321,   140,   322,    30,
  721.    270,    31,   323,   468,   454,   455,   340,   350,   451,   452,
  722.    456,   457,   346,   336,   407,   351,   356,   324,   384,   325,
  723.    326,   491,   493,   327,   418,   376,   328,   343,   357,   389,
  724.    332,   364,   333,   399,   334,   337,   426,   427,   428,   367,
  725.    507,   370,   408,   341,   385,   386,   387,   388,   437,   415,
  726.    391,   392,   419,   420,   395,   396,   342,   336,   504,   344,
  727.    517,   347,   403,   404,   405,   348,   429,    25,    26,    27,
  728.    352,   359,   360,   361,   365,   371,   438,   439,   440,   372,
  729.    512,   373,   374,    30,   375,    31,   377,   383,   390,   393,
  730.    126,   394,   400,   518,   397,   520,    32,   398,   401,   402,
  731.    472,   422,   474,    33,    34,   409,   410,    35,   533,   411,
  732.    414,    36,   416,   535,   417,   537,   406,   421,   423,   425,
  733.    431,   466,   467,   449,   432,   497,   470,   434,   435,   447,
  734.    475,   450,   458,   453,   486,   424,   487,   488,   499,   489,
  735.    490,   500,   501,   496,   498,   502,   273,   127,   128,   433,
  736.    130,   131,   132,   133,   134,   135,   136,   446,   506,   448,
  737.    127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
  738.    513,   461,   514,   523,   515,   298,   519,   521,   477,   477,
  739.     32,   522,   469,   525,   526,   529,   351,    33,    34,   539,
  740.    430,    35,   484,   217,   509,    36,   216,   335,   511,   505,
  741.    492,   494,   127,   128,   129,   130,   131,   132,   133,   134,
  742.    135,   136,   445,     0,   471,     0,     0,   379,     0,   524,
  743.    538,     2,     0,     0,   477,     0,   531,   532,     0,     0,
  744.      0,   534,     0,     0,   536,     0,   -33,   -33,   -33,     3,
  745.     25,    26,    27,     0,     0,     0,     0,   310,     0,     0,
  746.      0,   516,     0,     0,     0,     0,    30,     0,    31,     0,
  747.      0,     0,     0,    -6,    -6,     0,   -33,   -33,   -33,   -33,
  748.    -33,   -33,   -33,   -33,   -33,   -33,   -33,   -33,   -33,   -33,
  749.    -33,   -33,   -33,   -33,   -33,   -33,   -33,   -33,   -33,   -33,
  750.    -33,   -33,   -33,   -33,   -33,   -33,   -33,   -33,   -33,   -33,
  751.    -33,   -33,   -33,   -33,   -33,   -33,   -33,   -33,   -33,   -33,
  752.    -33,   -33,     4,   -33,   -33,   -33,   -33,   -33,   -33,   -33,
  753.    -33,   -33,   -33,   -33,   -33,   -33,   -33,     0,     5,   -33,
  754.    -33,   -35,     6,     7,     8,     9,    25,    26,    27,     0,
  755.      0,     0,     0,     0,     0,     0,     0,     0,    10,    25,
  756.     26,    27,    30,    32,    31,     0,   380,     0,     0,     0,
  757.     33,    34,     0,     0,    35,    30,     0,    31,    36,    25,
  758.     26,    27,     0,     0,    25,    26,    27,     0,     0,    25,
  759.     26,    27,     0,     0,     0,    30,     0,    31,     0,     0,
  760.     30,     0,    31,     0,     0,    30,     0,    31,   149,   150,
  761.    151,   152,   153,   154,   155,     0,     0,     0,     0,     0,
  762.      0,     0,     0,     0,   239,   240,   275,     0,   156,   157,
  763.    158,   159,   160,   161,   162,   163,   164,     0,     0,   165,
  764.    166,   167,   168,   169,   170,   127,   128,   129,   130,   131,
  765.    132,   133,   134,   135,   136,     0,     0,     0,   294,    32,
  766.    354,     0,     0,     0,     0,     0,   138,    34,     0,     0,
  767.     35,     0,    32,     0,   139,     0,     0,     0,     0,    33,
  768.     34,     0,     0,    35,     0,     0,     0,    36,     0,     0,
  769.      0,     0,    32,     0,     0,     0,     0,    32,     0,    33,
  770.     34,     0,    32,    35,    33,    34,     0,    36,    35,   138,
  771.     34,     0,   309,    35,     0,     0,     0,   139,   149,   150,
  772.    151,   152,   153,   154,   155,     0,     0,     0,     0,     0,
  773.    276,     0,     0,   245,   239,   240,     0,   254,   156,   157,
  774.    158,   159,   160,   161,   162,   163,   164,     0,     0,   165,
  775.    166,   167,   168,   169,   170,   149,   150,   151,   152,   153,
  776.    154,   155,     0,     0,     0,     0,     0,     0,     0,     0,
  777.      0,   239,   240,     0,     0,   156,   157,   158,   159,   160,
  778.    161,   162,   163,   164,     0,     0,   165,   166,   167,   168,
  779.    169,   170,   149,   150,   151,   152,   153,   154,   155,   127,
  780.    128,   129,   130,   131,   132,   133,   134,   135,   136,   495,
  781.      0,   378,   156,   157,   158,   159,   160,   161,   162,   163,
  782.    164,     0,     0,   165,   166,   167,   168,   169,   170,   149,
  783.    150,   151,   152,   153,   154,   155,     0,     0,     0,     0,
  784.    232,     0,     0,     0,     0,   239,   240,   436,     0,   156,
  785.    157,   158,   159,   160,   161,   162,   163,   164,     0,     0,
  786.    165,   166,   167,   168,   169,   170,     0,     0,     0,   149,
  787.    150,   151,   152,   153,   154,   155,     0,   232,     0,     0,
  788.      0,     0,     0,     0,     0,    43,    44,    45,   251,   156,
  789.    157,   158,   159,   160,   161,   162,   163,   164,     0,     0,
  790.    165,   166,   167,   168,   169,   170,     0,     0,     0,     0,
  791.      0,     0,     0,     0,   232,    46,    47,    48,    49,    50,
  792.     51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
  793.     61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
  794.     71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
  795.     81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
  796.     91,     0,    92,    93,    94,    95,    96,    97,    98,    99,
  797.    100,   101,   102,   103,   104,   105,     0,     0,   106,   107,
  798.    149,   150,   151,   152,   153,   154,   155,     0,     0,     0,
  799.      0,     0,     0,     0,     0,     0,   239,   240,     0,   473,
  800.    156,   157,   158,   159,   160,   161,   162,   163,   164,     0,
  801.      0,   165,   166,   167,   168,   169,   170,   149,   150,   151,
  802.    152,   153,   154,   155,     0,     0,     0,     0,     0,     0,
  803.      0,     0,     0,   239,   240,     0,     0,   156,   157,   158,
  804.    159,   160,   161,   162,   163,   164,     0,     0,   165,   166,
  805.    167,   168,   169,   170,   149,   150,   151,   152,   153,   154,
  806.    155,   127,   128,   129,   130,   131,   132,   133,   134,   135,
  807.    136,   508,     0,     0,   156,   157,   158,   159,   160,   161,
  808.    162,   163,   164,     0,     0,   165,   166,   167,   168,   169,
  809.    170,   149,   150,   151,   152,   153,   154,   155,     0,     0,
  810.      0,     0,     0,     0,     0,     0,     0,     0,   510,     0,
  811.      0,   156,   157,   158,   159,   160,   161,   162,   163,   164,
  812.      0,     0,   165,   166,   167,   168,   169,   170,   149,   150,
  813.    151,   152,   153,   154,   155,     0,     0,     0,     0,     0,
  814.      0,     0,     0,     0,     0,   530,     0,     0,   156,   157,
  815.    158,   159,   160,   161,   162,   163,   164,     0,     0,   165,
  816.    166,   167,   168,   169,   170,   149,   150,   151,   152,   153,
  817.    154,   155,     0,     0,     0,     0,     0,     0,     0,     0,
  818.      0,     0,     0,     0,     0,   156,   157,   158,   159,   160,
  819.    161,   162,   163,   164,     0,     0,   165,   166,   167,   168,
  820.    169,   170
  821. };
  822.  
  823. static const short yycheck[] = {     7,
  824.     29,    56,    10,    43,    86,    88,    72,    90,    11,    12,
  825.     76,    84,   256,   427,    20,    88,    99,    90,    43,    44,
  826.     44,    51,   122,    26,   242,    28,    99,   110,   110,    84,
  827.      9,    61,   132,    88,    89,    90,   242,   110,   256,    18,
  828.    113,   114,    19,    73,    99,    24,    55,   111,    78,   267,
  829.    256,     3,     4,     5,    33,   110,    35,    36,   472,    68,
  830.     61,   267,     3,     4,     5,    43,    44,    19,    92,    21,
  831.     52,    95,    73,   248,    12,   131,   251,    78,    19,   254,
  832.     93,    94,   107,    96,    97,    23,   111,     3,     4,     5,
  833.     32,    33,    74,    22,    23,    24,    25,    79,   130,    26,
  834.    275,    28,   277,    19,    26,    21,    28,     3,     4,     5,
  835.    122,   123,    49,   121,    11,    12,    53,   121,   122,   123,
  836.    124,   125,   126,    19,    10,    21,    63,   106,   107,    66,
  837.    122,   123,   124,   125,   126,   341,   342,    20,    75,   118,
  838.      3,     4,     5,   122,   123,    35,    36,    37,   127,   128,
  839.    129,   130,   131,   132,   133,   134,   135,   136,   128,   138,
  840.    139,   140,   131,   407,   116,   124,   125,   126,    11,    12,
  841.     10,   123,   124,    11,    12,   127,   117,   130,    67,   131,
  842.     69,   133,   134,    26,   428,    28,   130,   117,   118,    32,
  843.     33,   121,   122,   123,   124,   125,   126,    58,    59,    60,
  844.    116,   117,   130,   409,   410,   411,   130,   123,   124,   130,
  845.    428,   127,    81,    82,    83,   131,    94,   133,    96,    97,
  846.    116,   130,   428,     3,     4,     5,   130,   123,   124,   130,
  847.    474,   127,   407,    22,    23,   131,   130,   133,   130,    19,
  848.     20,    21,   130,   418,    11,    12,   242,   422,   122,   123,
  849.     11,    12,   248,   232,   337,   251,   474,   130,   313,   130,
  850.    130,   436,   437,   130,   347,   294,   130,    10,   474,    28,
  851.    130,   267,   130,   328,   130,   130,   359,   360,   361,   275,
  852.    486,   277,   337,   130,   314,   315,   316,   317,   371,   344,
  853.    320,   321,   347,   348,   324,   325,   130,   276,   473,   130,
  854.    506,   130,   332,   333,   334,   130,   361,     3,     4,     5,
  855.    130,   130,   130,   130,   130,   130,   371,   372,   373,   130,
  856.    495,   130,   130,    19,   130,    21,   130,   130,    26,    28,
  857.    309,    26,   130,   508,    28,   510,   116,    26,   130,   130,
  858.    423,    25,   425,   123,   124,   130,   130,   127,   523,   130,
  859.    132,   131,   130,   528,   130,   530,   335,   130,   130,   130,
  860.    130,   416,   417,   132,   130,   438,   421,   130,   130,   377,
  861.    425,     9,   402,    10,   130,   354,   431,   432,   130,   434,
  862.    435,   132,     9,   438,   439,     9,   365,   117,   118,   368,
  863.    120,   121,   122,   123,   124,   125,   126,   376,   130,   378,
  864.    117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
  865.    130,   407,   130,    23,   130,   132,   130,   130,   426,   427,
  866.    116,   130,   418,    12,   130,   130,   422,   123,   124,     0,
  867.    365,   127,   428,    65,   489,   131,    64,   133,   493,   474,
  868.    436,   437,   117,   118,   119,   120,   121,   122,   123,   124,
  869.    125,   126,   375,    -1,   422,    -1,    -1,   132,    -1,   514,
  870.      0,     1,    -1,    -1,   472,    -1,   521,   522,    -1,    -1,
  871.     -1,   526,    -1,    -1,   529,    -1,    16,    17,    18,    19,
  872.      3,     4,     5,    -1,    -1,    -1,    -1,    10,    -1,    -1,
  873.     -1,   499,    -1,    -1,    -1,    -1,    19,    -1,    21,    -1,
  874.     -1,    -1,    -1,    43,    44,    -1,    46,    47,    48,    49,
  875.     50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
  876.     60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
  877.     70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
  878.     80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
  879.     90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
  880.    100,   101,   102,   103,   104,   105,   106,    -1,   108,   109,
  881.    110,   111,   112,   113,   114,   115,     3,     4,     5,    -1,
  882.     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   128,     3,
  883.      4,     5,    19,   116,    21,    -1,    10,    -1,    -1,    -1,
  884.    123,   124,    -1,    -1,   127,    19,    -1,    21,   131,     3,
  885.      4,     5,    -1,    -1,     3,     4,     5,    -1,    -1,     3,
  886.      4,     5,    -1,    -1,    -1,    19,    -1,    21,    -1,    -1,
  887.     19,    -1,    21,    -1,    -1,    19,    -1,    21,     6,     7,
  888.      8,     9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
  889.     -1,    -1,    -1,    -1,    22,    23,    24,    -1,    26,    27,
  890.     28,    29,    30,    31,    32,    33,    34,    -1,    -1,    37,
  891.     38,    39,    40,    41,    42,   117,   118,   119,   120,   121,
  892.    122,   123,   124,   125,   126,    -1,    -1,    -1,   130,   116,
  893.    117,    -1,    -1,    -1,    -1,    -1,   123,   124,    -1,    -1,
  894.    127,    -1,   116,    -1,   131,    -1,    -1,    -1,    -1,   123,
  895.    124,    -1,    -1,   127,    -1,    -1,    -1,   131,    -1,    -1,
  896.     -1,    -1,   116,    -1,    -1,    -1,    -1,   116,    -1,   123,
  897.    124,    -1,   116,   127,   123,   124,    -1,   131,   127,   123,
  898.    124,    -1,   131,   127,    -1,    -1,    -1,   131,     6,     7,
  899.      8,     9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
  900.    128,    -1,    -1,   131,    22,    23,    -1,    25,    26,    27,
  901.     28,    29,    30,    31,    32,    33,    34,    -1,    -1,    37,
  902.     38,    39,    40,    41,    42,     6,     7,     8,     9,    10,
  903.     11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
  904.     -1,    22,    23,    -1,    -1,    26,    27,    28,    29,    30,
  905.     31,    32,    33,    34,    -1,    -1,    37,    38,    39,    40,
  906.     41,    42,     6,     7,     8,     9,    10,    11,    12,   117,
  907.    118,   119,   120,   121,   122,   123,   124,   125,   126,    23,
  908.     -1,   129,    26,    27,    28,    29,    30,    31,    32,    33,
  909.     34,    -1,    -1,    37,    38,    39,    40,    41,    42,     6,
  910.      7,     8,     9,    10,    11,    12,    -1,    -1,    -1,    -1,
  911.    128,    -1,    -1,    -1,    -1,    22,    23,    24,    -1,    26,
  912.     27,    28,    29,    30,    31,    32,    33,    34,    -1,    -1,
  913.     37,    38,    39,    40,    41,    42,    -1,    -1,    -1,     6,
  914.      7,     8,     9,    10,    11,    12,    -1,   128,    -1,    -1,
  915.     -1,    -1,    -1,    -1,    -1,    16,    17,    18,    25,    26,
  916.     27,    28,    29,    30,    31,    32,    33,    34,    -1,    -1,
  917.     37,    38,    39,    40,    41,    42,    -1,    -1,    -1,    -1,
  918.     -1,    -1,    -1,    -1,   128,    46,    47,    48,    49,    50,
  919.     51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
  920.     61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
  921.     71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
  922.     81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
  923.     91,    -1,    93,    94,    95,    96,    97,    98,    99,   100,
  924.    101,   102,   103,   104,   105,   106,    -1,    -1,   109,   110,
  925.      6,     7,     8,     9,    10,    11,    12,    -1,    -1,    -1,
  926.     -1,    -1,    -1,    -1,    -1,    -1,    22,    23,    -1,    25,
  927.     26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
  928.     -1,    37,    38,    39,    40,    41,    42,     6,     7,     8,
  929.      9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,
  930.     -1,    -1,    -1,    22,    23,    -1,    -1,    26,    27,    28,
  931.     29,    30,    31,    32,    33,    34,    -1,    -1,    37,    38,
  932.     39,    40,    41,    42,     6,     7,     8,     9,    10,    11,
  933.     12,   117,   118,   119,   120,   121,   122,   123,   124,   125,
  934.    126,    23,    -1,    -1,    26,    27,    28,    29,    30,    31,
  935.     32,    33,    34,    -1,    -1,    37,    38,    39,    40,    41,
  936.     42,     6,     7,     8,     9,    10,    11,    12,    -1,    -1,
  937.     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    23,    -1,
  938.     -1,    26,    27,    28,    29,    30,    31,    32,    33,    34,
  939.     -1,    -1,    37,    38,    39,    40,    41,    42,     6,     7,
  940.      8,     9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
  941.     -1,    -1,    -1,    -1,    -1,    23,    -1,    -1,    26,    27,
  942.     28,    29,    30,    31,    32,    33,    34,    -1,    -1,    37,
  943.     38,    39,    40,    41,    42,     6,     7,     8,     9,    10,
  944.     11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
  945.     -1,    -1,    -1,    -1,    -1,    26,    27,    28,    29,    30,
  946.     31,    32,    33,    34,    -1,    -1,    37,    38,    39,    40,
  947.     41,    42
  948. };
  949. /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
  950. #line 3 "/usr/local/gnu/lib/bison.simple"
  951.  
  952. /* Skeleton output parser for bison,
  953.    Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman
  954.  
  955.    This program is free software; you can redistribute it and/or modify
  956.    it under the terms of the GNU General Public License as published by
  957.    the Free Software Foundation; either version 1, or (at your option)
  958.    any later version.
  959.  
  960.    This program is distributed in the hope that it will be useful,
  961.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  962.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  963.    GNU General Public License for more details.
  964.  
  965.    You should have received a copy of the GNU General Public License
  966.    along with this program; if not, write to the Free Software
  967.    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  968.  
  969.  
  970. #ifndef alloca
  971. #ifdef __GNUC__
  972. #define alloca __builtin_alloca
  973. #else /* not GNU C.  */
  974. #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
  975. #include <alloca.h>
  976. #else /* not sparc */
  977. #if defined (MSDOS) && !defined (__TURBOC__)
  978. #include <malloc.h>
  979. #else /* not MSDOS, or __TURBOC__ */
  980. #if defined(_AIX)
  981. #include <malloc.h>
  982.  #pragma alloca
  983. #else /* not MSDOS, __TURBOC__, or _AIX */
  984. #ifdef __hpux
  985. #ifdef __cplusplus
  986. extern "C" {
  987. void *alloca (unsigned int);
  988. };
  989. #else /* not __cplusplus */
  990. void *alloca ();
  991. #endif /* not __cplusplus */
  992. #endif /* __hpux */
  993. #endif /* not _AIX */
  994. #endif /* not MSDOS, or __TURBOC__ */
  995. #endif /* not sparc.  */
  996. #endif /* not GNU C.  */
  997. #endif /* alloca not defined.  */
  998.  
  999. /* This is the parser code that is written into each bison parser
  1000.   when the %semantic_parser declaration is not specified in the grammar.
  1001.   It was written by Richard Stallman by simplifying the hairy parser
  1002.   used when %semantic_parser is specified.  */
  1003.  
  1004. /* Note: there must be only one dollar sign in this file.
  1005.    It is replaced by the list of actions, each action
  1006.    as one case of the switch.  */
  1007.  
  1008. #define yyerrok        (yyerrstatus = 0)
  1009. #define yyclearin    (yychar = YYEMPTY)
  1010. #define YYEMPTY        -2
  1011. #define YYEOF        0
  1012. #define YYACCEPT    return(0)
  1013. #define YYABORT     return(1)
  1014. #define YYERROR        goto yyerrlab1
  1015. /* Like YYERROR except do call yyerror.
  1016.    This remains here temporarily to ease the
  1017.    transition to the new meaning of YYERROR, for GCC.
  1018.    Once GCC version 2 has supplanted version 1, this can go.  */
  1019. #define YYFAIL        goto yyerrlab
  1020. #define YYRECOVERING()  (!!yyerrstatus)
  1021. #define YYBACKUP(token, value) \
  1022. do                                \
  1023.   if (yychar == YYEMPTY && yylen == 1)                \
  1024.     { yychar = (token), yylval = (value);            \
  1025.       yychar1 = YYTRANSLATE (yychar);                \
  1026.       YYPOPSTACK;                        \
  1027.       goto yybackup;                        \
  1028.     }                                \
  1029.   else                                \
  1030.     { yyerror ("syntax error: cannot back up"); YYERROR; }    \
  1031. while (0)
  1032.  
  1033. #define YYTERROR    1
  1034. #define YYERRCODE    256
  1035.  
  1036. #ifndef YYPURE
  1037. #define YYLEX        yylex()
  1038. #endif
  1039.  
  1040. #ifdef YYPURE
  1041. #ifdef YYLSP_NEEDED
  1042. #define YYLEX        yylex(&yylval, &yylloc)
  1043. #else
  1044. #define YYLEX        yylex(&yylval)
  1045. #endif
  1046. #endif
  1047.  
  1048. /* If nonreentrant, generate the variables here */
  1049.  
  1050. #ifndef YYPURE
  1051.  
  1052. int    yychar;            /*  the lookahead symbol        */
  1053. YYSTYPE    yylval;            /*  the semantic value of the        */
  1054.                 /*  lookahead symbol            */
  1055.  
  1056. #ifdef YYLSP_NEEDED
  1057. YYLTYPE yylloc;            /*  location data for the lookahead    */
  1058.                 /*  symbol                */
  1059. #endif
  1060.  
  1061. int yynerrs;            /*  number of parse errors so far       */
  1062. #endif  /* not YYPURE */
  1063.  
  1064. #if YYDEBUG != 0
  1065. int yydebug;            /*  nonzero means print parse trace    */
  1066. /* Since this is uninitialized, it does not stop multiple parsers
  1067.    from coexisting.  */
  1068. #endif
  1069.  
  1070. /*  YYINITDEPTH indicates the initial size of the parser's stacks    */
  1071.  
  1072. #ifndef    YYINITDEPTH
  1073. #define YYINITDEPTH 200
  1074. #endif
  1075.  
  1076. /*  YYMAXDEPTH is the maximum size the stacks can grow to
  1077.     (effective only if the built-in stack extension method is used).  */
  1078.  
  1079. #if YYMAXDEPTH == 0
  1080. #undef YYMAXDEPTH
  1081. #endif
  1082.  
  1083. #ifndef YYMAXDEPTH
  1084. #define YYMAXDEPTH 10000
  1085. #endif
  1086.  
  1087. /* Prevent warning if -Wstrict-prototypes.  */
  1088. #ifdef __GNUC__
  1089. int yyparse (void);
  1090. #endif
  1091.  
  1092. #if __GNUC__ > 1        /* GNU C and GNU C++ define this.  */
  1093. #define __yy_bcopy(FROM,TO,COUNT)    __builtin_memcpy(TO,FROM,COUNT)
  1094. #else                /* not GNU C or C++ */
  1095. #ifndef __cplusplus
  1096.  
  1097. /* This is the most reliable way to avoid incompatibilities
  1098.    in available built-in functions on various systems.  */
  1099. static void
  1100. __yy_bcopy (from, to, count)
  1101.      char *from;
  1102.      char *to;
  1103.      int count;
  1104. {
  1105.   register char *f = from;
  1106.   register char *t = to;
  1107.   register int i = count;
  1108.  
  1109.   while (i-- > 0)
  1110.     *t++ = *f++;
  1111. }
  1112.  
  1113. #else /* __cplusplus */
  1114.  
  1115. /* This is the most reliable way to avoid incompatibilities
  1116.    in available built-in functions on various systems.  */
  1117. static void
  1118. __yy_bcopy (char *from, char *to, int count)
  1119. {
  1120.   register char *f = from;
  1121.   register char *t = to;
  1122.   register int i = count;
  1123.  
  1124.   while (i-- > 0)
  1125.     *t++ = *f++;
  1126. }
  1127.  
  1128. #endif
  1129. #endif
  1130.  
  1131. #line 184 "/usr/local/gnu/lib/bison.simple"
  1132. int
  1133. yyparse()
  1134. {
  1135.   register int yystate;
  1136.   register int yyn;
  1137.   register short *yyssp;
  1138.   register YYSTYPE *yyvsp;
  1139.   int yyerrstatus;    /*  number of tokens to shift before error messages enabled */
  1140.   int yychar1 = 0;        /*  lookahead token as an internal (translated) token number */
  1141.  
  1142.   short    yyssa[YYINITDEPTH];    /*  the state stack            */
  1143.   YYSTYPE yyvsa[YYINITDEPTH];    /*  the semantic value stack        */
  1144.  
  1145.   short *yyss = yyssa;        /*  refer to the stacks thru separate pointers */
  1146.   YYSTYPE *yyvs = yyvsa;    /*  to allow yyoverflow to reallocate them elsewhere */
  1147.  
  1148. #ifdef YYLSP_NEEDED
  1149.   YYLTYPE yylsa[YYINITDEPTH];    /*  the location stack            */
  1150.   YYLTYPE *yyls = yylsa;
  1151.   YYLTYPE *yylsp;
  1152.  
  1153. #define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
  1154. #else
  1155. #define YYPOPSTACK   (yyvsp--, yyssp--)
  1156. #endif
  1157.  
  1158.   int yystacksize = YYINITDEPTH;
  1159.  
  1160. #ifdef YYPURE
  1161.   int yychar;
  1162.   YYSTYPE yylval;
  1163.   int yynerrs;
  1164. #ifdef YYLSP_NEEDED
  1165.   YYLTYPE yylloc;
  1166. #endif
  1167. #endif
  1168.  
  1169.   YYSTYPE yyval;        /*  the variable used to return        */
  1170.                 /*  semantic values from the action    */
  1171.                 /*  routines                */
  1172.  
  1173.   int yylen;
  1174.  
  1175. #if YYDEBUG != 0
  1176.   if (yydebug)
  1177.     fprintf(stderr, "Starting parse\n");
  1178. #endif
  1179.  
  1180.   yystate = 0;
  1181.   yyerrstatus = 0;
  1182.   yynerrs = 0;
  1183.   yychar = YYEMPTY;        /* Cause a token to be read.  */
  1184.  
  1185.   /* Initialize stack pointers.
  1186.      Waste one element of value and location stack
  1187.      so that they stay on the same level as the state stack.
  1188.      The wasted elements are never initialized.  */
  1189.  
  1190.   yyssp = yyss - 1;
  1191.   yyvsp = yyvs;
  1192. #ifdef YYLSP_NEEDED
  1193.   yylsp = yyls;
  1194. #endif
  1195.  
  1196. /* Push a new state, which is found in  yystate  .  */
  1197. /* In all cases, when you get here, the value and location stacks
  1198.    have just been pushed. so pushing a state here evens the stacks.  */
  1199. yynewstate:
  1200.  
  1201.   *++yyssp = yystate;
  1202.  
  1203.   if (yyssp >= yyss + yystacksize - 1)
  1204.     {
  1205.       /* Give user a chance to reallocate the stack */
  1206.       /* Use copies of these so that the &'s don't force the real ones into memory. */
  1207.       YYSTYPE *yyvs1 = yyvs;
  1208.       short *yyss1 = yyss;
  1209. #ifdef YYLSP_NEEDED
  1210.       YYLTYPE *yyls1 = yyls;
  1211. #endif
  1212.  
  1213.       /* Get the current used size of the three stacks, in elements.  */
  1214.       int size = yyssp - yyss + 1;
  1215.  
  1216. #ifdef yyoverflow
  1217.       /* Each stack pointer address is followed by the size of
  1218.      the data in use in that stack, in bytes.  */
  1219. #ifdef YYLSP_NEEDED
  1220.       /* This used to be a conditional around just the two extra args,
  1221.      but that might be undefined if yyoverflow is a macro.  */
  1222.       yyoverflow("parser stack overflow",
  1223.          &yyss1, size * sizeof (*yyssp),
  1224.          &yyvs1, size * sizeof (*yyvsp),
  1225.          &yyls1, size * sizeof (*yylsp),
  1226.          &yystacksize);
  1227. #else
  1228.       yyoverflow("parser stack overflow",
  1229.          &yyss1, size * sizeof (*yyssp),
  1230.          &yyvs1, size * sizeof (*yyvsp),
  1231.          &yystacksize);
  1232. #endif
  1233.  
  1234.       yyss = yyss1; yyvs = yyvs1;
  1235. #ifdef YYLSP_NEEDED
  1236.       yyls = yyls1;
  1237. #endif
  1238. #else /* no yyoverflow */
  1239.       /* Extend the stack our own way.  */
  1240.       if (yystacksize >= YYMAXDEPTH)
  1241.     {
  1242.       yyerror("parser stack overflow");
  1243.       return 2;
  1244.     }
  1245.       yystacksize *= 2;
  1246.       if (yystacksize > YYMAXDEPTH)
  1247.     yystacksize = YYMAXDEPTH;
  1248.       yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
  1249.       __yy_bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
  1250.       yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
  1251.       __yy_bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
  1252. #ifdef YYLSP_NEEDED
  1253.       yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
  1254.       __yy_bcopy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
  1255. #endif
  1256. #endif /* no yyoverflow */
  1257.  
  1258.       yyssp = yyss + size - 1;
  1259.       yyvsp = yyvs + size - 1;
  1260. #ifdef YYLSP_NEEDED
  1261.       yylsp = yyls + size - 1;
  1262. #endif
  1263.  
  1264. #if YYDEBUG != 0
  1265.       if (yydebug)
  1266.     fprintf(stderr, "Stack size increased to %d\n", yystacksize);
  1267. #endif
  1268.  
  1269.       if (yyssp >= yyss + yystacksize - 1)
  1270.     YYABORT;
  1271.     }
  1272.  
  1273. #if YYDEBUG != 0
  1274.   if (yydebug)
  1275.     fprintf(stderr, "Entering state %d\n", yystate);
  1276. #endif
  1277.  
  1278.   goto yybackup;
  1279.  yybackup:
  1280.  
  1281. /* Do appropriate processing given the current state.  */
  1282. /* Read a lookahead token if we need one and don't already have one.  */
  1283. /* yyresume: */
  1284.  
  1285.   /* First try to decide what to do without reference to lookahead token.  */
  1286.  
  1287.   yyn = yypact[yystate];
  1288.   if (yyn == YYFLAG)
  1289.     goto yydefault;
  1290.  
  1291.   /* Not known => get a lookahead token if don't already have one.  */
  1292.  
  1293.   /* yychar is either YYEMPTY or YYEOF
  1294.      or a valid token in external form.  */
  1295.  
  1296.   if (yychar == YYEMPTY)
  1297.     {
  1298. #if YYDEBUG != 0
  1299.       if (yydebug)
  1300.     fprintf(stderr, "Reading a token: ");
  1301. #endif
  1302.       yychar = YYLEX;
  1303.     }
  1304.  
  1305.   /* Convert token to internal form (in yychar1) for indexing tables with */
  1306.  
  1307.   if (yychar <= 0)        /* This means end of input. */
  1308.     {
  1309.       yychar1 = 0;
  1310.       yychar = YYEOF;        /* Don't call YYLEX any more */
  1311.  
  1312. #if YYDEBUG != 0
  1313.       if (yydebug)
  1314.     fprintf(stderr, "Now at end of input.\n");
  1315. #endif
  1316.     }
  1317.   else
  1318.     {
  1319.       yychar1 = YYTRANSLATE(yychar);
  1320.  
  1321. #if YYDEBUG != 0
  1322.       if (yydebug)
  1323.     {
  1324.       fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
  1325.       /* Give the individual parser a way to print the precise meaning
  1326.          of a token, for further debugging info.  */
  1327. #ifdef YYPRINT
  1328.       YYPRINT (stderr, yychar, yylval);
  1329. #endif
  1330.       fprintf (stderr, ")\n");
  1331.     }
  1332. #endif
  1333.     }
  1334.  
  1335.   yyn += yychar1;
  1336.   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
  1337.     goto yydefault;
  1338.  
  1339.   yyn = yytable[yyn];
  1340.  
  1341.   /* yyn is what to do for this token type in this state.
  1342.      Negative => reduce, -yyn is rule number.
  1343.      Positive => shift, yyn is new state.
  1344.        New state is final state => don't bother to shift,
  1345.        just return success.
  1346.      0, or most negative number => error.  */
  1347.  
  1348.   if (yyn < 0)
  1349.     {
  1350.       if (yyn == YYFLAG)
  1351.     goto yyerrlab;
  1352.       yyn = -yyn;
  1353.       goto yyreduce;
  1354.     }
  1355.   else if (yyn == 0)
  1356.     goto yyerrlab;
  1357.  
  1358.   if (yyn == YYFINAL)
  1359.     YYACCEPT;
  1360.  
  1361.   /* Shift the lookahead token.  */
  1362.  
  1363. #if YYDEBUG != 0
  1364.   if (yydebug)
  1365.     fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
  1366. #endif
  1367.  
  1368.   /* Discard the token being shifted unless it is eof.  */
  1369.   if (yychar != YYEOF)
  1370.     yychar = YYEMPTY;
  1371.  
  1372.   *++yyvsp = yylval;
  1373. #ifdef YYLSP_NEEDED
  1374.   *++yylsp = yylloc;
  1375. #endif
  1376.  
  1377.   /* count tokens shifted since error; after three, turn off error status.  */
  1378.   if (yyerrstatus) yyerrstatus--;
  1379.  
  1380.   yystate = yyn;
  1381.   goto yynewstate;
  1382.  
  1383. /* Do the default action for the current state.  */
  1384. yydefault:
  1385.  
  1386.   yyn = yydefact[yystate];
  1387.   if (yyn == 0)
  1388.     goto yyerrlab;
  1389.  
  1390. /* Do a reduction.  yyn is the number of a rule to reduce with.  */
  1391. yyreduce:
  1392.   yylen = yyr2[yyn];
  1393.   if (yylen > 0)
  1394.     yyval = yyvsp[1-yylen]; /* implement default value of the action */
  1395.  
  1396. #if YYDEBUG != 0
  1397.   if (yydebug)
  1398.     {
  1399.       int i;
  1400.  
  1401.       fprintf (stderr, "Reducing via rule %d (line %d), ",
  1402.            yyn, yyrline[yyn]);
  1403.  
  1404.       /* Print the symbols being reduced, and their result.  */
  1405.       for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
  1406.     fprintf (stderr, "%s ", yytname[yyrhs[i]]);
  1407.       fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
  1408.     }
  1409. #endif
  1410.  
  1411.  
  1412.   switch (yyn) {
  1413.  
  1414. case 3:
  1415. #line 248 "a56.y"
  1416. {
  1417.             if(pass == 2 && list_on && list_print_line) {
  1418.                 printf(ldebug ? "\n(%s|%s)\n" : "%s%s\n",
  1419.                     list_buf, substatement == 0 ? luntab(cur_line) : "");
  1420.                 if(uses_buf2)
  1421.                     printf(ldebug ? "\n(%s|)\n" : "%s\n",
  1422.                         list_buf2);
  1423.                 list_buf[0] = list_buf2[0] = '\0';
  1424.             }
  1425.             curline++;
  1426.             uses_buf2 = FALSE;
  1427.             list_print_line = TRUE;
  1428.             list_on = list_on_next;
  1429.             substatement = 0;
  1430.             if(NOT check_psect(seg, pc) && pass == 2)
  1431.                 yyerror("%04X: psect violation", pc);
  1432.             ;
  1433.     break;}
  1434. case 4:
  1435. #line 266 "a56.y"
  1436. {
  1437.             if(pass == 2 && list_on && list_print_line) {
  1438.                 printf(ldebug ? "\n(%s" : "%s", list_buf);
  1439.                 if(substatement == 0)
  1440.                     printf(ldebug ? "|%s)\n" : "%s\n", luntab(cur_line));
  1441.                 else
  1442.                     printf(ldebug ? ")\n" : "\n");
  1443.                 if(uses_buf2)
  1444.                     printf(ldebug ? "\n(%s|)\n" : "%s\n",
  1445.                         list_buf2);
  1446.                 list_buf[0] = list_buf2[0] = '\0';
  1447.             }
  1448.             substatement++;
  1449.             uses_buf2 = FALSE;
  1450.             list_print_line = TRUE;
  1451.             list_on = list_on_next;
  1452.             if(NOT check_psect(seg, pc) && pass == 2)
  1453.                 yyerror("%04X: psect violation", pc);
  1454.             ;
  1455.     break;}
  1456. case 5:
  1457. #line 286 "a56.y"
  1458. {curline++; substatement = 0;;
  1459.     break;}
  1460. case 6:
  1461. #line 291 "a56.y"
  1462. {sprintf(list_buf, "%s", spaces(0));;
  1463.     break;}
  1464. case 7:
  1465. #line 293 "a56.y"
  1466. {list_print_line = FALSE;;
  1467.     break;}
  1468. case 8:
  1469. #line 295 "a56.y"
  1470. {long_symbolic_expr = FALSE;;
  1471.     break;}
  1472. case 9:
  1473. #line 297 "a56.y"
  1474. {char *printcode();
  1475.             if(pass == 2) {
  1476.                 gencode(seg, pc, w0);
  1477.                 sprintf(list_buf, "%c:%04X %s ", segs[seg], pc, printcode(w0));
  1478.                 pc++;
  1479.                 if(uses_w1) {
  1480.                     gencode(seg, pc, w1);
  1481.                     sprintf(list_buf2, "%c:%04X %s", segs[seg], pc,
  1482.                                printcode(w1 & 0xFFFFFF));
  1483.                     uses_buf2++;
  1484.                     pc++;
  1485.                 }
  1486.             } else {
  1487.                 pc++;
  1488.                 if(uses_w1)
  1489.                     pc++;
  1490.             }
  1491.             w0 = w1 = 0; uses_w1 = FALSE; 
  1492.             long_symbolic_expr = FALSE;;
  1493.     break;}
  1494. case 10:
  1495. #line 317 "a56.y"
  1496. {sym_def(yyvsp[0].sval, INT, pc);
  1497.             free(yyvsp[0].sval);
  1498.             if(pass == 2 && list_on) {
  1499.                 sprintf(list_buf, "%c:%04X%s", segs[seg], pc, spaces(14-8));
  1500.             long_symbolic_expr = FALSE;
  1501.             };
  1502.     break;}
  1503. case 11:
  1504. #line 327 "a56.y"
  1505. {if(strlen(yyvsp[0].sval) > 0)
  1506.                 curfile = yyvsp[0].sval;
  1507.             else
  1508.                 curfile = "<stdin>";
  1509.             curline = yyvsp[-1].n.val.i - 1;;
  1510.     break;}
  1511. case 12:
  1512. #line 336 "a56.y"
  1513. {sym_def(yyvsp[-2].sval, yyvsp[0].n.type, yyvsp[0].n.val.i, yyvsp[0].n.val.f);
  1514.             free(yyvsp[-2].sval);
  1515.             if(pass == 2 && list_on) {
  1516.                 if(yyvsp[0].n.type == INT)
  1517.                     sprintf(list_buf, "%06X%s",
  1518.                         yyvsp[0].n.val.i & 0xFFFFFF,
  1519.                         spaces(14-8));
  1520.                 else
  1521.                     sprintf(list_buf, "%10g%s", yyvsp[0].n.val.f,
  1522.                         spaces(14-4));
  1523.             };
  1524.     break;}
  1525. case 13:
  1526. #line 348 "a56.y"
  1527. {int ival = n2int(yyvsp[0].n);
  1528.             if(yyvsp[0].n.type == UNDEF) {
  1529.                 yyerror("illegal forward reference");
  1530.             } else if (ival <= 1) {
  1531.                 yyerror("%d: illegal alignment", ival);
  1532.             } else {
  1533.                 if(pc % ival != 0)
  1534.                     pc += ival - pc % ival;
  1535.             }
  1536.             if(pass == 2 && list_on)
  1537.                 sprintf(list_buf, "%c:%04X%s", segs[seg], pc, 
  1538.                     spaces(14-8));
  1539.             ;
  1540.     break;}
  1541. case 14:
  1542. #line 362 "a56.y"
  1543. {struct psect *pp = find_psect(yyvsp[0].sval);
  1544.             if(NOT pp) {
  1545.                 if(pass == 2)
  1546.                     yyerror("%s: undefined psect", yyvsp[0].sval);
  1547.             } else {
  1548.                 seg = pp->seg;
  1549.                 pc = pp->pc;
  1550.                 set_psect(pp);
  1551.                 if(pass == 2 && list_on)
  1552.                     sprintf(list_buf, "%c:%04X%s", segs[seg], pc,
  1553.                         spaces(14-8));
  1554.             }
  1555.             free(yyvsp[0].sval);;
  1556.     break;}
  1557. case 15:
  1558. #line 376 "a56.y"
  1559. {new_psect(yyvsp[-4].sval, yyvsp[-3].ival, n2int(yyvsp[-2].n), n2int(yyvsp[0].n));
  1560.             if(pass == 2 && list_on)
  1561.                 sprintf(list_buf, "%c:%04X %04X%s", 
  1562.                     segs[yyvsp[-3].ival], n2int(yyvsp[-2].n), n2int(yyvsp[0].n), spaces(14-8+4+1));
  1563.             ;
  1564.     break;}
  1565. case 16:
  1566. #line 382 "a56.y"
  1567. {pc = n2int(yyvsp[0].n);
  1568.             seg = yyvsp[-1].ival;
  1569.             if(pass == 2 && list_on)
  1570.                 sprintf(list_buf, "%c:%04X%s", segs[seg], pc, 
  1571.                     spaces(14-8));
  1572.             ;
  1573.     break;}
  1574. case 17:
  1575. #line 389 "a56.y"
  1576. {pc = n2int(yyvsp[-3].n);
  1577.             seg = yyvsp[-4].ival;
  1578.             if(pass == 2 && list_on)
  1579.                 sprintf(list_buf, "%c:%04X%s", segs[seg], pc, 
  1580.                     spaces(14-8));
  1581.             ;
  1582.     break;}
  1583. case 19:
  1584. #line 397 "a56.y"
  1585. {pc += n2int(yyvsp[0].n);
  1586.             ;
  1587.     break;}
  1588. case 20:
  1589. #line 400 "a56.y"
  1590. {int size = n2int(yyvsp[0].n);
  1591.             if(size)
  1592.             {    int align = 1;
  1593.                  while(align < size)
  1594.                  align <<= 1;
  1595.                  pc += (align - (pc % align));
  1596.             }
  1597.             if(yyvsp[-2].sval)
  1598.             {   sym_def(yyvsp[-2].sval, INT, pc);
  1599.                  free(yyvsp[-2].sval);
  1600.             }
  1601.             pc += size;
  1602.             ;
  1603.     break;}
  1604. case 21:
  1605. #line 414 "a56.y"
  1606. {if(pass == 2 && list_on) {
  1607.                 sprintf(list_buf, "%s", spaces(0));
  1608.             };
  1609.     break;}
  1610. case 22:
  1611. #line 418 "a56.y"
  1612. {if(pass == 2 && list_on) {
  1613.                 printf(ldebug ? "\n(%s|%s)\n" : "%s%s\n",
  1614.                     spaces(0), luntab(cur_line));
  1615.                 list_print_line = FALSE;
  1616.             }
  1617.             include(yyvsp[0].sval); /* free($2); */
  1618.             ;
  1619.     break;}
  1620. case 23:
  1621. #line 426 "a56.y"
  1622. {if(pass == 2 && list_on) {
  1623.                 sprintf(list_buf, "%s", spaces(0));
  1624.             };
  1625.     break;}
  1626. case 26:
  1627. #line 438 "a56.y"
  1628. {int len = strlen(yyvsp[0].sval), i; char *cp; w0 = 0;
  1629.             if(len % 3 == 2)
  1630.                 len++;    /* force empty word */
  1631.             for(i = 0, cp = yyvsp[0].sval; i < len; i++, cp++) {
  1632.                 w0 |= (*cp & 0xFF) << (2 - (i % 3)) * 8;
  1633.                 if(i % 3 == 2 || i == len - 1) {
  1634.                     if(pass == 2) {
  1635.                         if(list_on) sprintf(list_buf, "%c:%04X %06X%s",
  1636.                             segs[seg], pc, w0, 
  1637.                             spaces(14-6+5));
  1638.                         gencode(seg, pc, w0);
  1639.                     }
  1640.                     pc++; w0 = 0;
  1641.                 }
  1642.             }
  1643.             free(yyvsp[0].sval);;
  1644.     break;}
  1645. case 27:
  1646. #line 455 "a56.y"
  1647. {int frac = n2frac(yyvsp[0].n);
  1648.             if(pass == 2) {
  1649.                 if(list_on) {
  1650.                     sprintf(list_buf, "%c:%04X %06X%s", segs[seg], pc, 
  1651.                         frac & 0xFFFFFF, spaces(14-6+5));
  1652.                 }
  1653.                 gencode(seg, pc, frac);
  1654.             }
  1655.             pc++;;
  1656.     break;}
  1657. case 28:
  1658. #line 466 "a56.y"
  1659. {yyval.ival = PROG;;
  1660.     break;}
  1661. case 29:
  1662. #line 468 "a56.y"
  1663. {yyval.ival = XDATA;;
  1664.     break;}
  1665. case 30:
  1666. #line 470 "a56.y"
  1667. {yyval.ival = YDATA;;
  1668.     break;}
  1669. case 31:
  1670. #line 472 "a56.y"
  1671. {yyval.ival = LDATA;;
  1672.     break;}
  1673. case 32:
  1674. #line 477 "a56.y"
  1675. {sym_def(yyvsp[0].sval, INT, pc);
  1676.             free(yyvsp[0].sval);;
  1677.     break;}
  1678. case 34:
  1679. #line 483 "a56.y"
  1680. {yyval.sval = yyvsp[0].sval;;
  1681.     break;}
  1682. case 35:
  1683. #line 484 "a56.y"
  1684. {yyval.sval = NULL;;
  1685.     break;}
  1686. case 36:
  1687. #line 489 "a56.y"
  1688. {if(just_rep) 
  1689.                 just_rep--;;
  1690.     break;}
  1691. case 38:
  1692. #line 496 "a56.y"
  1693. {w0 |= 0x200000;;
  1694.     break;}
  1695. case 40:
  1696. #line 505 "a56.y"
  1697. {w0 |= 0x80 | yyvsp[0].ival << 2;;
  1698.     break;}
  1699. case 41:
  1700. #line 507 "a56.y"
  1701. {w0 |= 0x81 | yyvsp[0].ival << 2;;
  1702.     break;}
  1703. case 42:
  1704. #line 509 "a56.y"
  1705. {w0 |= 0x82 | yyvsp[0].ival << 2;;
  1706.     break;}
  1707. case 43:
  1708. #line 511 "a56.y"
  1709. {w0 |= 0x83 | yyvsp[0].ival << 2;;
  1710.     break;}
  1711. case 44:
  1712. #line 514 "a56.y"
  1713. {w0 |= 0x04 | yyvsp[0].ival << 3;;
  1714.     break;}
  1715. case 45:
  1716. #line 516 "a56.y"
  1717. {w0 |= 0x00 | yyvsp[0].ival << 3;;
  1718.     break;}
  1719. case 46:
  1720. #line 518 "a56.y"
  1721. {w0 |= 0x00;;
  1722.     break;}
  1723. case 47:
  1724. #line 521 "a56.y"
  1725. {w0 |= 0x01 | yyvsp[0].ival << 3;;
  1726.     break;}
  1727. case 48:
  1728. #line 523 "a56.y"
  1729. {w0 |= 0x05 | yyvsp[0].ival << 3;;
  1730.     break;}
  1731. case 49:
  1732. #line 525 "a56.y"
  1733. {w0 |= 0x07 | yyvsp[0].ival << 3;;
  1734.     break;}
  1735. case 50:
  1736. #line 528 "a56.y"
  1737. {w0 |= 0x11 | yyvsp[0].ival << 3;;
  1738.     break;}
  1739. case 51:
  1740. #line 530 "a56.y"
  1741. {w0 |= 0x12 | yyvsp[0].ival << 3;;
  1742.     break;}
  1743. case 52:
  1744. #line 532 "a56.y"
  1745. {w0 |= 0x13 | yyvsp[0].ival << 3;;
  1746.     break;}
  1747. case 53:
  1748. #line 534 "a56.y"
  1749. {w0 |= 0x16 | yyvsp[0].ival << 3;;
  1750.     break;}
  1751. case 54:
  1752. #line 536 "a56.y"
  1753. {w0 |= 0x17 | yyvsp[0].ival << 3;;
  1754.     break;}
  1755. case 55:
  1756. #line 539 "a56.y"
  1757. {w0 |= 0x02 | yyvsp[0].ival << 3;;
  1758.     break;}
  1759. case 56:
  1760. #line 541 "a56.y"
  1761. {w0 |= 0x03 | yyvsp[0].ival << 3;;
  1762.     break;}
  1763. case 57:
  1764. #line 543 "a56.y"
  1765. {w0 |= 0x06 | yyvsp[0].ival << 3;;
  1766.     break;}
  1767. case 58:
  1768. #line 546 "a56.y"
  1769. {w0 |= 0x46 | yyvsp[0].ival << 3;;
  1770.     break;}
  1771. case 59:
  1772. #line 548 "a56.y"
  1773. {w0 |= 0x42 | yyvsp[0].ival << 3;;
  1774.     break;}
  1775. case 60:
  1776. #line 550 "a56.y"
  1777. {w0 |= 0x43 | yyvsp[0].ival << 3;;
  1778.     break;}
  1779. case 61:
  1780. #line 553 "a56.y"
  1781. {w0 |= 0x22 | yyvsp[0].ival << 3;;
  1782.     break;}
  1783. case 62:
  1784. #line 555 "a56.y"
  1785. {w0 |= 0x23 | yyvsp[0].ival << 3;;
  1786.     break;}
  1787. case 63:
  1788. #line 557 "a56.y"
  1789. {w0 |= 0x26 | yyvsp[0].ival << 3;;
  1790.     break;}
  1791. case 64:
  1792. #line 559 "a56.y"
  1793. {w0 |= 0x27 | yyvsp[0].ival << 3;;
  1794.     break;}
  1795. case 65:
  1796. #line 562 "a56.y"
  1797. {w0 |= 0x32 | yyvsp[0].ival << 3;;
  1798.     break;}
  1799. case 66:
  1800. #line 564 "a56.y"
  1801. {w0 |= 0x33 | yyvsp[0].ival << 3;;
  1802.     break;}
  1803. case 67:
  1804. #line 566 "a56.y"
  1805. {w0 |= 0x36 | yyvsp[0].ival << 3;;
  1806.     break;}
  1807. case 68:
  1808. #line 568 "a56.y"
  1809. {w0 |= 0x37 | yyvsp[0].ival << 3;;
  1810.     break;}
  1811. case 69:
  1812. #line 571 "a56.y"
  1813. {w0 |= 0x21 | yyvsp[0].ival << 3;;
  1814.     break;}
  1815. case 70:
  1816. #line 573 "a56.y"
  1817. {w0 |= 0x25 | yyvsp[0].ival << 3;;
  1818.     break;}
  1819. case 71:
  1820. #line 577 "a56.y"
  1821. {yyval.ival = yyvsp[-3].ival | yyvsp[0].ival << 1 | yyvsp[-2].ival << 2;;
  1822.     break;}
  1823. case 72:
  1824. #line 582 "a56.y"
  1825. {yyval.ival = 0;;
  1826.     break;}
  1827. case 73:
  1828. #line 584 "a56.y"
  1829. {yyval.ival = 1;;
  1830.     break;}
  1831. case 74:
  1832. #line 586 "a56.y"
  1833. {yyval.ival = 0;;
  1834.     break;}
  1835. case 75:
  1836. #line 591 "a56.y"
  1837. {switch (yyvsp[-2].ival << 4 | yyvsp[0].ival) {
  1838.                 case 0x00: yyval.ival = 0x0; break;
  1839.                 case 0x01: 
  1840.                 case 0x10: yyval.ival = 0x2; break;
  1841.                 case 0x11: 
  1842.                     yyerror("illegal source operands"); 
  1843.                     break;
  1844.             };
  1845.     break;}
  1846. case 76:
  1847. #line 600 "a56.y"
  1848. {switch (yyvsp[-2].ival << 4 | yyvsp[0].ival) {
  1849.                 case 0x00: yyval.ival = 0x1; break;
  1850.                 case 0x01: 
  1851.                 case 0x10: yyval.ival = 0x3; break;
  1852.                 case 0x11: 
  1853.                     yyerror("illegal source operands"); 
  1854.                     break;
  1855.             };
  1856.     break;}
  1857. case 77:
  1858. #line 609 "a56.y"
  1859. {switch (yyvsp[-2].ival << 4 | yyvsp[0].ival) {
  1860.                 case 0x00: yyval.ival = 0x5; break;
  1861.                 case 0x01: yyval.ival = 0x4; break;
  1862.                 case 0x10: yyval.ival = 0x6; break;
  1863.                 case 0x11: yyval.ival = 0x7; break;
  1864.             };
  1865.     break;}
  1866. case 78:
  1867. #line 616 "a56.y"
  1868. {switch (yyvsp[-2].ival << 4 | yyvsp[0].ival) {
  1869.                 case 0x00: yyval.ival = 0x5; break;
  1870.                 case 0x01: yyval.ival = 0x6; break;
  1871.                 case 0x10: yyval.ival = 0x4; break;
  1872.                 case 0x11: yyval.ival = 0x7; break;
  1873.             };
  1874.     break;}
  1875. case 79:
  1876. #line 625 "a56.y"
  1877. {yyval.ival = 0x2;;
  1878.     break;}
  1879. case 80:
  1880. #line 627 "a56.y"
  1881. {yyval.ival = 0x3;;
  1882.     break;}
  1883. case 81:
  1884. #line 629 "a56.y"
  1885. {yyval.ival = 0x4 | yyvsp[0].ival;;
  1886.     break;}
  1887. case 82:
  1888. #line 631 "a56.y"
  1889. {yyval.ival = 0x6 | yyvsp[0].ival;;
  1890.     break;}
  1891. case 83:
  1892. #line 633 "a56.y"
  1893. {yyval.ival = 0x8 | yyvsp[-2].ival << 2 | yyvsp[0].ival;;
  1894.     break;}
  1895. case 84:
  1896. #line 635 "a56.y"
  1897. {yyval.ival = 0xA | yyvsp[-2].ival << 2 | yyvsp[0].ival;;
  1898.     break;}
  1899. case 85:
  1900. #line 639 "a56.y"
  1901. {yyval.ival = 0x0;;
  1902.     break;}
  1903. case 86:
  1904. #line 641 "a56.y"
  1905. {yyval.ival = 0x1;;
  1906.     break;}
  1907. case 87:
  1908. #line 643 "a56.y"
  1909. {yyval.ival = 0x8 | yyvsp[-2].ival << 2 | yyvsp[0].ival;;
  1910.     break;}
  1911. case 88:
  1912. #line 645 "a56.y"
  1913. {yyval.ival = 0xA | yyvsp[-2].ival << 2 | yyvsp[0].ival;;
  1914.     break;}
  1915. case 89:
  1916. #line 649 "a56.y"
  1917. {yyval.ival = 0x0;;
  1918.     break;}
  1919. case 90:
  1920. #line 651 "a56.y"
  1921. {yyval.ival = 0x1;;
  1922.     break;}
  1923. case 91:
  1924. #line 653 "a56.y"
  1925. {yyval.ival = 0x0;;
  1926.     break;}
  1927. case 92:
  1928. #line 655 "a56.y"
  1929. {yyval.ival = 0x1;;
  1930.     break;}
  1931. case 93:
  1932. #line 659 "a56.y"
  1933. {yyval.ival = yyvsp[0].ival;;
  1934.     break;}
  1935. case 94:
  1936. #line 663 "a56.y"
  1937. {yyval.ival = 0x0 | yyvsp[-2].ival << 2 | yyvsp[0].ival;;
  1938.     break;}
  1939. case 95:
  1940. #line 665 "a56.y"
  1941. {yyval.ival = 0x2 | yyvsp[-2].ival << 2 | yyvsp[0].ival;;
  1942.     break;}
  1943. case 96:
  1944. #line 669 "a56.y"
  1945. {yyval.ival = yyvsp[0].ival;;
  1946.     break;}
  1947. case 97:
  1948. #line 673 "a56.y"
  1949. {yyval.ival = yyvsp[0].ival;;
  1950.     break;}
  1951. case 98:
  1952. #line 677 "a56.y"
  1953. {yyval.ival = 0x0 | yyvsp[0].ival;;
  1954.     break;}
  1955. case 99:
  1956. #line 679 "a56.y"
  1957. {yyval.ival = 0x2 | yyvsp[0].ival;;
  1958.     break;}
  1959. case 100:
  1960. #line 683 "a56.y"
  1961. {yyval.ival = 0;;
  1962.     break;}
  1963. case 101:
  1964. #line 685 "a56.y"
  1965. {yyval.ival = 1;;
  1966.     break;}
  1967. case 102:
  1968. #line 690 "a56.y"
  1969. {if(just_rep == 1)
  1970.                 yyerror("instruction not allowed after REP");;
  1971.     break;}
  1972. case 106:
  1973. #line 701 "a56.y"
  1974. {w0 |= 0x01D815 | yyvsp[-2].ival << 8 | yyvsp[0].ival << 3;;
  1975.     break;}
  1976. case 107:
  1977. #line 703 "a56.y"
  1978. {w0 |= 0x018040 | yyvsp[0].ival << 3;;
  1979.     break;}
  1980. case 108:
  1981. #line 705 "a56.y"
  1982. {w0 |= 0x0000F8 | (n2int(yyvsp[-2].n) & 0xFF) << 8 | yyvsp[0].ival;;
  1983.     break;}
  1984. case 109:
  1985. #line 707 "a56.y"
  1986. {w0 |= 0x0000B8 | (n2int(yyvsp[-2].n) & 0xFF) << 8 | yyvsp[0].ival;;
  1987.     break;}
  1988. case 114:
  1989. #line 722 "a56.y"
  1990. {if(yyvsp[0].ival) {
  1991.                 w0 |= 0x0BC0A0 | yyvsp[-1].cond << 0;
  1992.             } else {
  1993.                 w0 |= 0x0F0000 | yyvsp[-1].cond << 12;
  1994.             };
  1995.     break;}
  1996. case 115:
  1997. #line 728 "a56.y"
  1998. {if(yyvsp[0].ival) {
  1999.                 w0 |= 0x0AC0A0 | yyvsp[-1].cond << 0;
  2000.             } else {
  2001.                 w0 |= 0x0E0000 | yyvsp[-1].cond << 12;
  2002.             };
  2003.     break;}
  2004. case 116:
  2005. #line 734 "a56.y"
  2006. {if(yyvsp[0].ival) {
  2007.                 w0 |= 0x0BC080;
  2008.             } else {
  2009.                 w0 |= 0x0D0000;
  2010.             };
  2011.     break;}
  2012. case 117:
  2013. #line 740 "a56.y"
  2014. {if(yyvsp[0].ival) {
  2015.                 w0 |= 0x0AC080;
  2016.             } else {
  2017.                 w0 |= 0x0C0000;
  2018.             };
  2019.     break;}
  2020. case 118:
  2021. #line 747 "a56.y"
  2022. {w0 |= 0x0B0020;;
  2023.     break;}
  2024. case 119:
  2025. #line 749 "a56.y"
  2026. {w0 |= 0x0B0000;;
  2027.     break;}
  2028. case 120:
  2029. #line 751 "a56.y"
  2030. {w0 |= 0x0A0020;;
  2031.     break;}
  2032. case 121:
  2033. #line 753 "a56.y"
  2034. {w0 |= 0x0A0000;;
  2035.     break;}
  2036. case 122:
  2037. #line 756 "a56.y"
  2038. {just_rep = 2;;
  2039.     break;}
  2040. case 123:
  2041. #line 758 "a56.y"
  2042. {uses_w1++;;
  2043.     break;}
  2044. case 124:
  2045. #line 760 "a56.y"
  2046. {w0 |= 0x00008C;;
  2047.     break;}
  2048. case 125:
  2049. #line 762 "a56.y"
  2050. {w0 |= 0x000087;;
  2051.     break;}
  2052. case 126:
  2053. #line 764 "a56.y"
  2054. {w0 |= 0x000086;;
  2055.     break;}
  2056. case 127:
  2057. #line 766 "a56.y"
  2058. {w0 |= 0x000084;;
  2059.     break;}
  2060. case 128:
  2061. #line 768 "a56.y"
  2062. {w0 |= 0x00000C;;
  2063.     break;}
  2064. case 129:
  2065. #line 770 "a56.y"
  2066. {w0 |= 0x000006;;
  2067.     break;}
  2068. case 130:
  2069. #line 772 "a56.y"
  2070. {w0 |= 0x000005;;
  2071.     break;}
  2072. case 131:
  2073. #line 774 "a56.y"
  2074. {w0 |= 0x000004;;
  2075.     break;}
  2076. case 132:
  2077. #line 776 "a56.y"
  2078. {w0 |= 0x000000;
  2079.             just_rep = 0;;
  2080.     break;}
  2081. case 133:
  2082. #line 781 "a56.y"
  2083. {int ival = n2int(yyvsp[-2].n);
  2084.             w0 |= 0x060080 | (ival & 0xFF) << 8 | (ival & 0xF00)>> 8;
  2085.             if(ival > 0xFFF && pass == 2) {
  2086.                 yyerror("warning: immediate operand truncated");
  2087.             }
  2088.             w1 |= yyvsp[0].ival-1;;
  2089.     break;}
  2090. case 134:
  2091. #line 788 "a56.y"
  2092. {w0 |= 0x06C000 | yyvsp[-2].regs.r6 << 8;
  2093.             w1 |= yyvsp[0].ival-1;;
  2094.     break;}
  2095. case 135:
  2096. #line 791 "a56.y"
  2097. {w0 |= 0x064000 | yyvsp[-2].ival << 8 | yyvsp[-3].ival << 6;
  2098.             w1 |= yyvsp[0].ival-1;;
  2099.     break;}
  2100. case 136:
  2101. #line 794 "a56.y"
  2102. {w0 |= 0x060000 | (yyvsp[-2].ival & 0x3F) << 8 | yyvsp[-3].ival << 6;
  2103.             if(yyvsp[-2].ival > 0x003F && pass == 2)
  2104.                 yyerror("warning: address operand truncated");
  2105.             w1 |= yyvsp[0].ival-1;;
  2106.     break;}
  2107. case 137:
  2108. #line 799 "a56.y"
  2109. {w0 |= 0x060000 | (yyvsp[-2].ival & 0x3F) << 8 | yyvsp[-3].ival << 6;
  2110.             if(yyvsp[-2].ival > 0x003F && pass == 2)
  2111.                 yyerror("warning: address operand truncated");
  2112.             w1 |= yyvsp[0].ival-1;;
  2113.     break;}
  2114. case 138:
  2115. #line 807 "a56.y"
  2116. {int ival = n2int(yyvsp[0].n);
  2117.             w0 |= 0x0600A0 | (ival & 0xFF) << 8 | (ival & 0xF00)>> 8;
  2118.             if(ival > 0xFFF && pass == 2) {
  2119.                 yyerror("warning: immediate operand truncated");
  2120.             };
  2121.     break;}
  2122. case 139:
  2123. #line 813 "a56.y"
  2124. {w0 |= 0x06C020 | yyvsp[0].regs.r6 << 8;;
  2125.     break;}
  2126. case 140:
  2127. #line 815 "a56.y"
  2128. {w0 |= 0x064020 | yyvsp[-1].ival << 6 | yyvsp[0].ival << 8;;
  2129.     break;}
  2130. case 141:
  2131. #line 817 "a56.y"
  2132. {w0 |= 0x060020 | yyvsp[-1].ival << 6 | (yyvsp[0].ival & 0x3F) << 8;
  2133.             if(yyvsp[0].ival > 0x003F && pass == 2)
  2134.                 yyerror("warning: address operand truncated");
  2135.             ;
  2136.     break;}
  2137. case 142:
  2138. #line 822 "a56.y"
  2139. {w0 |= 0x060020 | yyvsp[-1].ival << 6 | (yyvsp[0].ival & 0x3F) << 8;
  2140.             if(yyvsp[0].ival > 0x003F && pass == 2)
  2141.                 yyerror("warning: address operand truncated");
  2142.             ;
  2143.     break;}
  2144. case 143:
  2145. #line 830 "a56.y"
  2146. {w0 |= yyvsp[-5].ival << 0 | yyvsp[-3].ival << 6;
  2147.             uses_w1++;
  2148.             w1 = yyvsp[0].ival;;
  2149.     break;}
  2150. case 144:
  2151. #line 834 "a56.y"
  2152. {w0 |= 0x00C000 | yyvsp[-4].ival << 0 | yyvsp[-2].regs.r6 << 8;
  2153.             uses_w1++;
  2154.             w1 = yyvsp[0].ival;;
  2155.     break;}
  2156. case 145:
  2157. #line 846 "a56.y"
  2158. {if(yyvsp[0].ival != -1) {    /* symbol defined */
  2159.                 w0 |= (yyvsp[0].ival & 0x3F) << 8;
  2160.                 if(yyvsp[0].ival >= 0xFFC0) {
  2161.                     w0 |= 0x008080;
  2162.                 } else {
  2163.                     w0 |= 0x000080;
  2164.                     if(yyvsp[0].ival > 0x003F && pass == 2)
  2165.                         yyerror("warning: address operand truncated");
  2166.                 }
  2167.             };
  2168.     break;}
  2169. case 146:
  2170. #line 857 "a56.y"
  2171. {if(yyvsp[0].ival != -1) {
  2172.                 if(yyvsp[0].ival > 0x3F && pass == 2)
  2173.                     yyerror("warning: address operand truncated");
  2174.                 w0 |= 0x000080 | (yyvsp[0].ival & 0x3F) << 8;
  2175.             };
  2176.     break;}
  2177. case 147:
  2178. #line 863 "a56.y"
  2179. {if(yyvsp[0].ival != -1) {
  2180.                 if(yyvsp[0].ival < 0xFFC0 && pass == 2)
  2181.                     yyerror("warning: address operand truncated");
  2182.                 w0 |= 0x008080 | (yyvsp[0].ival & 0x3F) << 8;
  2183.             };
  2184.     break;}
  2185. case 148:
  2186. #line 869 "a56.y"
  2187. {w0 |= 0x004080 | yyvsp[0].ival << 8;;
  2188.     break;}
  2189. case 149:
  2190. #line 876 "a56.y"
  2191. {w0 |= 0x0B0020;;
  2192.     break;}
  2193. case 150:
  2194. #line 878 "a56.y"
  2195. {w0 |= 0x0B0000;;
  2196.     break;}
  2197. case 151:
  2198. #line 880 "a56.y"
  2199. {w0 |= 0x0A0020;;
  2200.     break;}
  2201. case 152:
  2202. #line 882 "a56.y"
  2203. {w0 |= 0x0A0000;;
  2204.     break;}
  2205. case 153:
  2206. #line 887 "a56.y"
  2207. {w0 |= yyvsp[-3].ival << 0 | yyvsp[-1].ival << 6;;
  2208.     break;}
  2209. case 154:
  2210. #line 889 "a56.y"
  2211. {w0 |= 0x00C040 | yyvsp[-2].ival << 0 | yyvsp[0].regs.r6 << 8;;
  2212.     break;}
  2213. case 155:
  2214. #line 894 "a56.y"
  2215. {if(yyvsp[0].ival != -1) {
  2216.                 w0 |= (yyvsp[0].ival & 0x3F) << 8 | 0x008000;
  2217.                 if(yyvsp[0].ival < 0xFFC0 && pass == 2)
  2218.                     yyerror("warning: address operand truncated");
  2219.             };
  2220.     break;}
  2221. case 156:
  2222. #line 900 "a56.y"
  2223. {if(yyvsp[0].ival != -1) {
  2224.                 w0 |= (yyvsp[0].ival & 0x3F) << 8 | 0x000000;
  2225.                 if(yyvsp[0].ival > 0x003F && pass == 2)
  2226.                     yyerror("warning: address operand truncated");
  2227.             };
  2228.     break;}
  2229. case 157:
  2230. #line 906 "a56.y"
  2231. {w0 |= 0x004000;;
  2232.     break;}
  2233. case 161:
  2234. #line 916 "a56.y"
  2235. {w0 |= 0x044010 | yyvsp[-2].ival << 8 | yyvsp[0].regs.r4;;
  2236.     break;}
  2237. case 162:
  2238. #line 918 "a56.y"
  2239. {w0 |= yyvsp[-1].cond << 12;;
  2240.     break;}
  2241. case 163:
  2242. #line 923 "a56.y"
  2243. {w0 |= 0x020000 | yyvsp[0].ival << 3;;
  2244.     break;}
  2245. case 164:
  2246. #line 925 "a56.y"
  2247. {w0 |= 0x030000 | yyvsp[-3].ival << 3 | yyvsp[-2].ival << 8 | yyvsp[0].ival;;
  2248.     break;}
  2249. case 165:
  2250. #line 929 "a56.y"
  2251. {if(yyvsp[-2].regs.flags & R_AB && yyvsp[0].regs.flags & R_AB) {
  2252.                 if(yyvsp[-2].regs.ab == yyvsp[0].regs.ab) 
  2253.                     yyerror("source and dest must be different");
  2254.                 yyval.ival = yyvsp[0].regs.ab;
  2255.             } else if(yyvsp[-2].regs.flags & R_XREG && yyvsp[0].regs.flags & R_AB) {
  2256.                 yyval.ival = 0x8 | yyvsp[-2].regs.xreg << 2 | yyvsp[0].regs.ab;
  2257.             } else if(yyvsp[-2].regs.flags & R_YREG && yyvsp[0].regs.flags & R_AB) {
  2258.                 yyval.ival = 0xA | yyvsp[-2].regs.yreg << 2 | yyvsp[0].regs.ab;
  2259.             } else 
  2260.                 yyerror("illegal TCC operands");
  2261.             ;
  2262.     break;}
  2263. case 166:
  2264. #line 943 "a56.y"
  2265. {if(yyvsp[-2].regs.flags & R_XREG && yyvsp[0].regs.flags & R_AB) {
  2266.                 yyval.ival = yyvsp[-2].regs.xreg << 2 | yyvsp[0].regs.ab;
  2267.             } else if(yyvsp[-2].regs.flags & R_YREG && yyvsp[0].regs.flags & R_AB) {
  2268.                 yyval.ival = yyvsp[-2].regs.yreg << 2 | 2 | yyvsp[0].regs.ab;
  2269.             };
  2270.     break;}
  2271. case 167:
  2272. #line 952 "a56.y"
  2273. {if(NOT (yyvsp[0].regs.flags & R_CTL_REG))
  2274.                 yyerror("bad MOVEC target register");
  2275.             if(yyvsp[-3].ival == 0) {
  2276.                 w0 |= 0x05C020 | yyvsp[0].regs.ctl_reg;
  2277.             } else {
  2278.                 w0 |= 0x05C060 | yyvsp[0].regs.ctl_reg;
  2279.             };
  2280.     break;}
  2281. case 168:
  2282. #line 960 "a56.y"
  2283. {if(NOT (yyvsp[-3].regs.flags & R_CTL_REG))
  2284.                 yyerror("bad MOVEC source register");
  2285.             if(yyvsp[-1].ival == 0) {
  2286.                 w0 |= 0x054020 | yyvsp[-3].regs.ctl_reg;
  2287.             } else {
  2288.                 w0 |= 0x054060 | yyvsp[-3].regs.ctl_reg;
  2289.             };
  2290.     break;}
  2291. case 169:
  2292. #line 968 "a56.y"
  2293. {int ival = n2int(yyvsp[-2].n);
  2294.             if(NOT (yyvsp[0].regs.flags & R_CTL_REG))
  2295.                 yyerror("bad MOVEC target register");
  2296.             if(ival < 256 && NOT long_symbolic_expr) {
  2297.                 w0 |= 0x0500A0 | (ival & 0xFF) << 8 | yyvsp[0].regs.ctl_reg; 
  2298.             } else {
  2299.                 w0 |= 0x05C020 | 0x003400 | yyvsp[0].regs.ctl_reg;
  2300.                 uses_w1++; w1 = ival & 0xFFFF;
  2301.             };
  2302.     break;}
  2303. case 170:
  2304. #line 978 "a56.y"
  2305. {if(yyvsp[-3].ival == 0) {
  2306.                 w0 |= 0x058020 | (yyvsp[-2].ival & 0x3F) << 8 | yyvsp[0].regs.ctl_reg;
  2307.             } else {
  2308.                 w0 |= 0x058060 | (yyvsp[-2].ival & 0x3F) << 8 | yyvsp[0].regs.ctl_reg;
  2309.             }
  2310.             if(NOT (yyvsp[0].regs.flags & R_CTL_REG))
  2311.                 yyerror("bad MOVEC target register");
  2312.             if(yyvsp[-2].ival > 0x003F && pass == 2)
  2313.                 yyerror("warning: address operand truncated");
  2314.             ;
  2315.     break;}
  2316. case 171:
  2317. #line 989 "a56.y"
  2318. {if(yyvsp[-1].ival == 0) {
  2319.                 w0 |= 0x050020 | (yyvsp[0].ival & 0x3F) << 8 | yyvsp[-3].regs.ctl_reg;
  2320.             } else {
  2321.                 w0 |= 0x050060 | (yyvsp[0].ival & 0x3F) << 8 | yyvsp[-3].regs.ctl_reg;
  2322.             }
  2323.             if(NOT (yyvsp[-3].regs.flags & R_CTL_REG))
  2324.                 yyerror("bad MOVEC source register");
  2325.             if(yyvsp[0].ival > 0x003F && pass == 2)
  2326.                 yyerror("warning: address operand truncated");
  2327.             ;
  2328.     break;}
  2329. case 172:
  2330. #line 1000 "a56.y"
  2331. {if(yyvsp[-2].regs.flags & R_CTL_REG) {
  2332.                 w0 |= 0x0440A0 | yyvsp[0].regs.r6 << 8 | yyvsp[-2].regs.ctl_reg;
  2333.             } else if(yyvsp[0].regs.flags & R_CTL_REG) {
  2334.                 w0 |= 0x04C0A0 | yyvsp[-2].regs.r6 << 8 | yyvsp[0].regs.ctl_reg;
  2335.             } else if(yyvsp[-2].regs.flags & yyvsp[0].regs.flags & R_CTL_REG) {
  2336.                 /* bogus? $$$ */
  2337.                        w0 |= 0x04C0A0 | (yyvsp[-2].regs.ctl_reg | 0x20) << 8 | 
  2338.                 yyvsp[0].regs.ctl_reg;
  2339.             } else {
  2340.                 yyerror("MOVEC must reference a control reg");
  2341.             };
  2342.     break;}
  2343. case 173:
  2344. #line 1015 "a56.y"
  2345. {w0 |= 0x084080;
  2346.             switch(yyvsp[-3].ea.pp << 1 | yyvsp[0].ea.pp) {
  2347.                 case 0:    case 3:
  2348.                     yyerror("illegal MOVEP; can't move EA to EA or IO to IO");
  2349.                     break;
  2350.                 case 1:    /* ea, pp */
  2351.                     w0 |= yyvsp[-1].ival << 16 | 1 << 15 | yyvsp[-4].ival << 6 |
  2352.                         (yyvsp[0].ea.ext & 0x3F);
  2353.                     if(yyvsp[-3].ea.mode == 0x003000) {
  2354.                         w0 |= 0x003000;
  2355.                         uses_w1++;
  2356.                         w1 = yyvsp[-3].ea.ext;
  2357.                     } else {
  2358.                         w0 |= yyvsp[-3].ea.mode;
  2359.                     }
  2360.                     break;
  2361.                 case 2:    /* pp, ea */
  2362.                     w0 |= yyvsp[-4].ival << 16 | 0 << 15 | yyvsp[-1].ival << 6 |
  2363.                         (yyvsp[-3].ea.ext & 0x3F);
  2364.                     if(yyvsp[0].ea.mode == 0x003000) {
  2365.                         w0 |= 0x003000;
  2366.                         uses_w1++;
  2367.                         w1 = yyvsp[0].ea.ext;
  2368.                     } else {
  2369.                         w0 |= yyvsp[0].ea.mode;
  2370.                     }
  2371.                     break;
  2372.             };
  2373.     break;}
  2374. case 174:
  2375. #line 1044 "a56.y"
  2376. {w0 |= 0x084080;
  2377.             w0 |= yyvsp[-1].ival << 16 | 1 << 15 | 0x34 << 8 | 
  2378.                 (n2int(yyvsp[0].n) & 0x3F);
  2379.             uses_w1++;
  2380.             w1 = n2int(yyvsp[-3].n);;
  2381.     break;}
  2382. case 175:
  2383. #line 1050 "a56.y"
  2384. {w0 |= 0x084040;
  2385.             w0 |= yyvsp[-1].ival << 16 | 1 << 15 | (n2int(yyvsp[0].n) & 0x3F);;
  2386.     break;}
  2387. case 176:
  2388. #line 1053 "a56.y"
  2389. {w0 |= 0x084040;
  2390.             if(yyvsp[-3].ea.mode != 0x003000 && yyvsp[-3].ea.mode != 0)
  2391.                 yyerror("illegal MOVEP");
  2392.             w0 |= yyvsp[-4].ival << 16 | 0 << 15 | (yyvsp[-3].ea.ext & 0x3F);;
  2393.     break;}
  2394. case 177:
  2395. #line 1058 "a56.y"
  2396. {w0 |= 0x084000;
  2397.             w0 |= yyvsp[-1].ival << 16 | 1 << 15 | yyvsp[-3].regs.r6 << 8 | 
  2398.                 (n2int(yyvsp[0].n) & 0x3F);;
  2399.     break;}
  2400. case 178:
  2401. #line 1062 "a56.y"
  2402. {w0 |= 0x084000;
  2403.             if(!yyvsp[-2].ea.pp)
  2404.                 yyerror("illegal MOVEP");
  2405.             w0 |= yyvsp[-3].ival << 16 | 0 << 15 | yyvsp[0].regs.r6 << 8 | (yyvsp[-2].ea.ext & 0x3F);;
  2406.     break;}
  2407. case 179:
  2408. #line 1070 "a56.y"
  2409. {if(yyvsp[0].ival != UNDEF && yyvsp[0].ival >= 0xFFC0) {
  2410.                 /* defined symbol or constant, in i/o range */
  2411.                 yyval.ea.pp = 1;
  2412.                 yyval.ea.mode = 0;
  2413.             } else {
  2414.                 /* either out of i/o range or symbol not */
  2415.                 /* yet defined:  assume ea extension */
  2416.                 yyval.ea.pp = 0;
  2417.                 yyval.ea.mode = 0x003000;
  2418.             }
  2419.             yyval.ea.ext = yyvsp[0].ival;;
  2420.     break;}
  2421. case 180:
  2422. #line 1082 "a56.y"
  2423. {yyval.ea.pp = 1;
  2424.             yyval.ea.mode = 0;
  2425.             if(yyvsp[0].ival < 0xFFC0 && pass == 2)
  2426.                 yyerror("warning: address operand truncated");
  2427.             yyval.ea.ext = yyvsp[0].ival;;
  2428.     break;}
  2429. case 181:
  2430. #line 1088 "a56.y"
  2431. {yyval.ea.pp = 0;
  2432.             yyval.ea.mode = yyvsp[0].ival << 8;
  2433.             yyval.ea.ext = yyvsp[0].ival;;
  2434.     break;}
  2435. case 182:
  2436. #line 1095 "a56.y"
  2437. {w0 |= 0x070000 | 0 << 15 | yyvsp[-3].regs.r6;;
  2438.     break;}
  2439. case 183:
  2440. #line 1097 "a56.y"
  2441. {w0 |= 0x070000 | 1 << 15 | yyvsp[0].regs.r6;;
  2442.     break;}
  2443. case 184:
  2444. #line 1104 "a56.y"
  2445. {int ival = n2int(yyvsp[0].n);
  2446.             yyval.ival = ival; if(ival > 0x17) 
  2447.                 yyerror("%d: illegal bit number", ival);;
  2448.     break;}
  2449. case 185:
  2450. #line 1110 "a56.y"
  2451. {yyval.ival = 0;;
  2452.     break;}
  2453. case 186:
  2454. #line 1112 "a56.y"
  2455. {yyval.ival = 1;;
  2456.     break;}
  2457. case 187:
  2458. #line 1118 "a56.y"
  2459. {w0 |= 0x004080;;
  2460.     break;}
  2461. case 188:
  2462. #line 1120 "a56.y"
  2463. {w0 |= (yyvsp[0].ival & 0x3F) << 8;
  2464.             if(yyvsp[0].ival > 0x003F && pass == 2)
  2465.                 yyerror("warning: address operand truncated");
  2466.             ;
  2467.     break;}
  2468. case 189:
  2469. #line 1127 "a56.y"
  2470. {yyval.ival = 1;;
  2471.     break;}
  2472. case 190:
  2473. #line 1129 "a56.y"
  2474. {w0 |= yyvsp[0].ival & 0xFFF; yyval.ival = 0;
  2475.             if(yyvsp[0].ival > 0x0FFF && pass == 2)
  2476.                 yyerror("warning: address operand truncated");
  2477.             ;
  2478.     break;}
  2479. case 191:
  2480. #line 1136 "a56.y"
  2481. {w0 |= 0x003000;
  2482.             uses_w1++;
  2483.             w1 |= yyvsp[0].ival;
  2484.             yyval.ival = 0x003000;;
  2485.     break;}
  2486. case 192:
  2487. #line 1141 "a56.y"
  2488. {w0 |= yyvsp[0].ival << 8;
  2489.             yyval.ival = yyvsp[0].ival << 8;;
  2490.     break;}
  2491. case 193:
  2492. #line 1147 "a56.y"
  2493. {yyval.ival = yyvsp[0].ival;;
  2494.     break;}
  2495. case 194:
  2496. #line 1149 "a56.y"
  2497. {yyval.ival = 4 << 3 | yyvsp[-1].ival;;
  2498.     break;}
  2499. case 195:
  2500. #line 1151 "a56.y"
  2501. {yyval.ival = 5 << 3 | yyvsp[-3].ival;
  2502.             if(yyvsp[-3].ival != yyvsp[-1].ival) yyerror("Rn and Nn must be same number");;
  2503.     break;}
  2504. case 196:
  2505. #line 1154 "a56.y"
  2506. {yyval.ival = 7 << 3 | yyvsp[-1].ival;;
  2507.     break;}
  2508. case 197:
  2509. #line 1159 "a56.y"
  2510. {yyval.ival = 0 << 3 | yyvsp[-3].ival;
  2511.             if(yyvsp[-3].ival != yyvsp[0].ival) yyerror("Rn and Nn must be same number");;
  2512.     break;}
  2513. case 198:
  2514. #line 1162 "a56.y"
  2515. {yyval.ival = 1 << 3 | yyvsp[-3].ival;
  2516.             if(yyvsp[-3].ival != yyvsp[0].ival) yyerror("Rn and Nn must be same number");;
  2517.     break;}
  2518. case 199:
  2519. #line 1165 "a56.y"
  2520. {yyval.ival = 2 << 3 | yyvsp[-2].ival;;
  2521.     break;}
  2522. case 200:
  2523. #line 1167 "a56.y"
  2524. {yyval.ival = 3 << 3 | yyvsp[-2].ival;;
  2525.     break;}
  2526. case 201:
  2527. #line 1173 "a56.y"
  2528. {yyval.regs.r6 = yyval.regs.r5 = 0x04 | yyvsp[0].ival;
  2529.             yyval.regs.sdx = yyvsp[0].ival;
  2530.             yyval.regs.xreg = yyvsp[0].ival;
  2531.             yyval.regs.flags = R_R6|R_R5|R_XREG|R_SDX|R_SFRAC;;
  2532.     break;}
  2533. case 202:
  2534. #line 1178 "a56.y"
  2535. {yyval.regs.r6 = yyval.regs.r5 = 0x06 | yyvsp[0].ival;
  2536.             yyval.regs.sdy = yyvsp[0].ival;
  2537.             yyval.regs.yreg = yyvsp[0].ival;
  2538.             yyval.regs.flags = R_R6|R_R5|R_SDY|R_YREG|R_SFRAC;;
  2539.     break;}
  2540. case 203:
  2541. #line 1183 "a56.y"
  2542. {switch(yyvsp[0].ival) {
  2543.                 case 0: 
  2544.                     yyval.regs.r6 = yyval.regs.r5 = 0x08 | 0; 
  2545.                     break;
  2546.                 case 1: 
  2547.                     yyval.regs.r6 = yyval.regs.r5 = 0x08 | 4; 
  2548.                     break;
  2549.                 case 2: 
  2550.                     yyval.regs.r6 = yyval.regs.r5 = 0x08 | 2; 
  2551.                     break;
  2552.             }
  2553.             yyval.regs.flags = R_R6|R_R5|R_UINT;;
  2554.     break;}
  2555. case 204:
  2556. #line 1196 "a56.y"
  2557. {switch(yyvsp[0].ival) {
  2558.                 case 0: 
  2559.                     yyval.regs.r6 = yyval.regs.r5 = 0x08 | 1; break;
  2560.                 case 1: 
  2561.                     yyval.regs.r6 = yyval.regs.r5 = 0x08 | 5; break;
  2562.                 case 2: 
  2563.                     yyval.regs.r6 = yyval.regs.r5 = 0x08 | 3; break;
  2564.             }
  2565.             yyval.regs.flags = R_R6|R_R5|R_UINT;;
  2566.     break;}
  2567. case 205:
  2568. #line 1206 "a56.y"
  2569. {yyval.regs.r6 = yyval.regs.r5 = 0x0E;
  2570.             yyval.regs.sdx = yyval.regs.sdy = 0x2;
  2571.             yyval.regs.ab = 0;
  2572.             yyval.regs.lsd = 4;
  2573.             yyval.regs.flags = R_R6|R_R5|R_SDX|R_SDY|R_AB|R_LSD|R_SFRAC;;
  2574.     break;}
  2575. case 206:
  2576. #line 1212 "a56.y"
  2577. {yyval.regs.r6 = yyval.regs.r5 = 0x0F;
  2578.             yyval.regs.sdx = yyval.regs.sdy = 0x3;
  2579.             yyval.regs.ab = 1;
  2580.             yyval.regs.lsd = 5;
  2581.             yyval.regs.flags = R_R6|R_R5|R_SDX|R_SDY|R_AB|R_LSD|R_SFRAC;;
  2582.     break;}
  2583. case 207:
  2584. #line 1218 "a56.y"
  2585. {yyval.regs.r6 = yyval.regs.r5 = 0x10 | yyvsp[0].ival;
  2586.             yyval.regs.r4 = 0x00 | yyvsp[0].ival;
  2587.             yyval.regs.flags = R_R6|R_R5|R_R4|R_UINT;;
  2588.     break;}
  2589. case 208:
  2590. #line 1222 "a56.y"
  2591. {yyval.regs.r6 = yyval.regs.r5 = 0x18 | yyvsp[0].ival;
  2592.             yyval.regs.r4 = 0x08 | yyvsp[0].ival;
  2593.             yyval.regs.flags = R_R6|R_R5|R_R4|R_UINT;;
  2594.     break;}
  2595. case 209:
  2596. #line 1226 "a56.y"
  2597. {yyval.regs.r6 = 0x20 | yyvsp[0].ival;
  2598.             yyval.regs.r5 = -1;
  2599.             yyval.regs.ctl_reg = yyvsp[0].ival;
  2600.             yyval.regs.flags = R_R6|R_R5|R_CTL_REG|R_UINT;;
  2601.     break;}
  2602. case 210:
  2603. #line 1231 "a56.y"
  2604. {yyval.regs.r6 = 0x38 | yyvsp[0].ival;
  2605.             yyval.regs.r5 = -1;
  2606.             yyval.regs.ctl_reg = 0x18 | yyvsp[0].ival;
  2607.             yyval.regs.flags = R_R6|R_R5|R_CTL_REG|R_UINT;;
  2608.     break;}
  2609. case 211:
  2610. #line 1236 "a56.y"
  2611. {yyval.regs.lsd  = 0;
  2612.             yyval.regs.flags = R_LSD;;
  2613.     break;}
  2614. case 212:
  2615. #line 1239 "a56.y"
  2616. {yyval.regs.lsd = 1;
  2617.             yyval.regs.flags = R_LSD;;
  2618.     break;}
  2619. case 213:
  2620. #line 1242 "a56.y"
  2621. {yyval.regs.lsd = 2;
  2622.             yyval.regs.flags = R_LSD;;
  2623.     break;}
  2624. case 214:
  2625. #line 1245 "a56.y"
  2626. {yyval.regs.lsd = 3;
  2627.             yyval.regs.flags = R_LSD;;
  2628.     break;}
  2629. case 215:
  2630. #line 1248 "a56.y"
  2631. {yyval.regs.lsd = 6;
  2632.             yyval.regs.flags = R_LSD;;
  2633.     break;}
  2634. case 216:
  2635. #line 1251 "a56.y"
  2636. {yyval.regs.lsd = 7;
  2637.             yyval.regs.flags = R_LSD;;
  2638.     break;}
  2639. case 217:
  2640. #line 1257 "a56.y"
  2641. {yyval.ival = 1;;
  2642.     break;}
  2643. case 218:
  2644. #line 1259 "a56.y"
  2645. {yyval.ival = 2;;
  2646.     break;}
  2647. case 219:
  2648. #line 1261 "a56.y"
  2649. {yyval.ival = 3;;
  2650.     break;}
  2651. case 220:
  2652. #line 1263 "a56.y"
  2653. {yyval.ival = 4;;
  2654.     break;}
  2655. case 221:
  2656. #line 1265 "a56.y"
  2657. {yyval.ival = 5;;
  2658.     break;}
  2659. case 222:
  2660. #line 1267 "a56.y"
  2661. {yyval.ival = 6;;
  2662.     break;}
  2663. case 223:
  2664. #line 1269 "a56.y"
  2665. {yyval.ival = 7;;
  2666.     break;}
  2667. case 224:
  2668. #line 1274 "a56.y"
  2669. {yyval.ival = 0;;
  2670.     break;}
  2671. case 225:
  2672. #line 1276 "a56.y"
  2673. {yyval.ival = 1;;
  2674.     break;}
  2675. case 226:
  2676. #line 1278 "a56.y"
  2677. {yyval.ival = 2;;
  2678.     break;}
  2679. case 235:
  2680. #line 1295 "a56.y"
  2681. {int ival = n2int(yyvsp[-2].n);
  2682.             int frac = n2frac(yyvsp[-2].n);
  2683.             int value;
  2684.             BOOL shortform = FALSE;
  2685.             if(yyvsp[0].regs.flags & R_CTL_REG) {
  2686.                 yyerror("please use MOVEC for control register moves");
  2687.                 break;
  2688.             }
  2689.             if((yyvsp[0].regs.flags & R_SFRAC) && yyvsp[-2].n.type == FLT) {
  2690.                 if((frac & 0xFFFF) == 0 && 
  2691.                     NOT long_symbolic_expr) {
  2692.                     value = frac >> 16;
  2693.                     shortform++;
  2694.                 } else {
  2695.                     value = frac;
  2696.                 }
  2697.             } else {
  2698.                 if(ival <= 0xFF && ival >= -0xFF && NOT long_symbolic_expr) {
  2699.                     value = ival;
  2700.                     shortform++;
  2701.                 } else {
  2702.                     value = ival;
  2703.                 }
  2704.             }
  2705.  
  2706.             if(shortform) {
  2707.                 w0 |= 0x200000 | (value & 0xFF) << 8 |
  2708.                     yyvsp[0].regs.r5 << 16;
  2709.             } else {
  2710.                 w0 |= 0x400000 | 0x00F400 |
  2711.                     (yyvsp[0].regs.r5 >> 3 & 3) << 20 | 
  2712.                     (yyvsp[0].regs.r5 & 7) << 16;
  2713.                 uses_w1++; w1 = value;
  2714.             };
  2715.     break;}
  2716. case 236:
  2717. #line 1332 "a56.y"
  2718. {
  2719.                 if(yyvsp[0].regs.flags & R_CTL_REG) {
  2720.                     yyerror("please use MOVEC for control register moves");
  2721.                     break;
  2722.                 }
  2723.                 if(yyvsp[-2].regs.flags & R_R5 & yyvsp[0].regs.flags) 
  2724.                     w0 |= 0x200000 | yyvsp[0].regs.r5 << 8 | yyvsp[-2].regs.r5 << 13;
  2725.                 else
  2726.                     yyerror("illegal R move");
  2727.             ;
  2728.     break;}
  2729. case 237:
  2730. #line 1345 "a56.y"
  2731. {w0 |= 0x204000 | yyvsp[0].ival << 8;;
  2732.     break;}
  2733. case 238:
  2734. #line 1350 "a56.y"
  2735. {w0 |= 0x40C000 | yyvsp[-3].ival << 19;
  2736.             if(yyvsp[0].regs.flags & R_CTL_REG) {
  2737.                 yyerror("please use MOVEC for control register moves");
  2738.                 break;
  2739.             }
  2740.             w0 |= (yyvsp[0].regs.r5 >> 3 & 3) << 20 | (yyvsp[0].regs.r5 & 7) << 16;;
  2741.     break;}
  2742. case 239:
  2743. #line 1357 "a56.y"
  2744. {w0 |= 0x408000 | yyvsp[-3].ival << 19 | (yyvsp[-2].ival & 0x3F) << 8;
  2745.             if(yyvsp[0].regs.flags & R_CTL_REG) {
  2746.                 yyerror("please use MOVEC for control register moves");
  2747.                 break;
  2748.             }
  2749.             if(yyvsp[-2].ival > 0x003F && pass == 2)
  2750.                 yyerror("warning: address operand truncated");
  2751.             w0 |= (yyvsp[0].regs.r5>> 3 & 3) << 20 | (yyvsp[0].regs.r5 & 7) << 16;;
  2752.     break;}
  2753. case 240:
  2754. #line 1366 "a56.y"
  2755. {w0 |= 0x404000 | yyvsp[-1].ival << 19;
  2756.             if(yyvsp[-3].regs.flags & R_CTL_REG) {
  2757.                 yyerror("please use MOVEC for control register moves");
  2758.                 break;
  2759.             }
  2760.             w0 |= (yyvsp[-3].regs.r5 >> 3 & 3) << 20 | (yyvsp[-3].regs.r5 & 7) << 16;;
  2761.     break;}
  2762. case 241:
  2763. #line 1373 "a56.y"
  2764. {w0 |= 0x400000 | yyvsp[-1].ival << 19 | (yyvsp[0].ival & 0x3F) << 8;
  2765.             if(yyvsp[-3].regs.flags & R_CTL_REG) {
  2766.                 yyerror("please use MOVEC for control register moves");
  2767.                 break;
  2768.             }
  2769.             if(yyvsp[0].ival > 0x003F && pass == 2)
  2770.                 yyerror("warning: address operand truncated");
  2771.             w0 |= (yyvsp[-3].regs.r5 >> 3 & 3) << 20 | (yyvsp[-3].regs.r5 & 7) << 16;;
  2772.     break;}
  2773. case 242:
  2774. #line 1382 "a56.y"
  2775. {w0 |= 0x400000 | 0x00F400 | (yyvsp[0].regs.r5 >> 3 & 3) << 20 |
  2776.                 (yyvsp[0].regs.r5 & 7) << 16;
  2777.             if(yyvsp[0].regs.flags & R_CTL_REG) {
  2778.                 yyerror("please use MOVEC for control register moves");
  2779.                 break;
  2780.             }
  2781.             uses_w1++; w1 = n2frac(yyvsp[-2].n);
  2782.             ;
  2783.     break;}
  2784. case 243:
  2785. #line 1393 "a56.y"
  2786. {if(yyvsp[-6].ival == 0 && yyvsp[-2].regs.flags & R_AB) {
  2787.                 w0 |= 0x108000 | yyvsp[-3].regs.sdx << 18 | yyvsp[-2].regs.ab << 17 |
  2788.                     yyvsp[0].ival << 16;
  2789.             } else {
  2790.                 yyerror("illegal X:R move");
  2791.             };
  2792.     break;}
  2793. case 244:
  2794. #line 1400 "a56.y"
  2795. {if(yyvsp[-2].regs.flags & R_AB) {
  2796.                 w0 |= 0x10B400 | yyvsp[-3].regs.sdx << 18 | yyvsp[-2].regs.ab << 17 |
  2797.                     yyvsp[0].ival << 16;
  2798.                 uses_w1++;
  2799.                 w1 |= n2frac(yyvsp[-5].n) & 0xFFFFFF;
  2800.             } else {
  2801.                 yyerror("illegal X:R move");
  2802.             };
  2803.     break;}
  2804. case 245:
  2805. #line 1409 "a56.y"
  2806. {if(yyvsp[-6].regs.flags & R_SDX && yyvsp[-4].ival == 0 && yyvsp[-2].regs.flags & R_AB &&
  2807.                 yyvsp[0].regs.flags & R_YREG) {
  2808.                 w0 |= 0x100000 | yyvsp[-6].regs.sdx << 18 | yyvsp[-2].regs.ab << 17 |
  2809.                     yyvsp[0].regs.yreg << 16;
  2810.             } else if(yyvsp[-6].regs.flags & R_AB && yyvsp[-4].ival == 0 && 
  2811.                 yyvsp[-2].regs.flags & R_XREG && yyvsp[0].regs.flags & R_AB) {
  2812.                 if(yyvsp[-2].regs.xreg != 0) yyerror("must use X0");
  2813.                 if(yyvsp[-6].regs.ab == 0 && yyvsp[0].regs.ab == 0)
  2814.                     w0 |= 0x080000;
  2815.                 else if(yyvsp[-6].regs.ab == 1 && yyvsp[0].regs.ab == 1)
  2816.                     w0 |= 0x090000;
  2817.                 else
  2818.                     yyerror("illegal X:R move");
  2819.             } else {
  2820.                 yyerror("illegal X:R move");
  2821.             };
  2822.     break;}
  2823. case 246:
  2824. #line 1428 "a56.y"
  2825. {if(yyvsp[-4].regs.flags & R_XREG && yyvsp[0].regs.flags & (R_YREG|R_AB)) {
  2826.                 w0 |= 0x10C000 | yyvsp[-6].regs.ab << 19 | yyvsp[-4].regs.xreg << 18 |
  2827.                     yyvsp[0].regs.sdy << 16;
  2828.             } else {
  2829.                 yyerror("illegal R:Y move");
  2830.             };
  2831.     break;}
  2832. case 247:
  2833. #line 1435 "a56.y"
  2834. {if(yyvsp[-3].regs.flags & R_XREG && yyvsp[0].regs.flags & (R_YREG|R_AB)) {
  2835.                 w0 |= 0x10F400 | yyvsp[-5].regs.ab << 19 | yyvsp[-3].regs.xreg << 18 |
  2836.                     yyvsp[0].regs.sdy << 16;
  2837.                 uses_w1++;
  2838.                 w1 |= n2frac(yyvsp[-2].n) & 0xFFFFFF;
  2839.             } else {
  2840.                 yyerror("illegal R:Y move");
  2841.             };
  2842.     break;}
  2843. case 248:
  2844. #line 1444 "a56.y"
  2845. {if(yyvsp[-6].regs.flags & R_AB && yyvsp[-4].regs.flags & R_XREG) {
  2846.                 w0 |= 0x104000 | yyvsp[-6].regs.ab << 19 | yyvsp[-4].regs.xreg << 18 |
  2847.                 yyvsp[-3].regs.sdy << 16;
  2848.             } else if (yyvsp[-6].regs.flags & R_YREG && yyvsp[-4].regs.flags & R_AB &&
  2849.                 yyvsp[-3].regs.flags & R_AB) {
  2850.                 if(yyvsp[-6].regs.yreg != 0) yyerror("must use Y0");
  2851.                 if(yyvsp[-4].regs.ab == 0 && yyvsp[-3].regs.ab == 0)
  2852.                     w0 |= 0x088000;
  2853.                 else if(yyvsp[-4].regs.ab == 1 && yyvsp[-3].regs.ab == 1)
  2854.                     w0 |= 0x098000;
  2855.                 else
  2856.                     yyerror("illegal R:Y move");
  2857.             } else {
  2858.                 yyerror("illegal R:Y move");
  2859.             };
  2860.     break;}
  2861. case 249:
  2862. #line 1462 "a56.y"
  2863. {if(yyvsp[0].regs.flags & R_CTL_REG) {
  2864.                 yyerror("please use MOVEC for control register moves");
  2865.                 break;
  2866.             }
  2867.             w0 |= 0x40C000 | (yyvsp[0].regs.lsd & 3) << 16 | (yyvsp[0].regs.lsd >> 2) << 19;;
  2868.     break;}
  2869. case 250:
  2870. #line 1468 "a56.y"
  2871. {if(yyvsp[-3].regs.flags & R_CTL_REG) {
  2872.                 yyerror("please use MOVEC for control register moves");
  2873.                 break;
  2874.             }
  2875.             w0 |= 0x404000 | (yyvsp[-3].regs.lsd & 3) << 16 | (yyvsp[-3].regs.lsd >> 2) << 19;;
  2876.     break;}
  2877. case 251:
  2878. #line 1474 "a56.y"
  2879. {w0 |= 0x408000 | (yyvsp[0].regs.lsd & 3) << 16 | (yyvsp[0].regs.lsd >> 2) << 19;
  2880.             if(yyvsp[0].regs.flags & R_CTL_REG) {
  2881.                 yyerror("please use MOVEC for control register moves");
  2882.                 break;
  2883.             }
  2884.             if(yyvsp[-2].ival > 0x003F && pass == 2)
  2885.                 yyerror("warning: address operand truncated");
  2886.             w0 |= (yyvsp[-2].ival & 0x3F) << 8;;
  2887.     break;}
  2888. case 252:
  2889. #line 1483 "a56.y"
  2890. {w0 |= 0x400000 | (yyvsp[-3].regs.lsd & 3) << 16 | (yyvsp[-3].regs.lsd >> 2) << 19;
  2891.             if(yyvsp[-3].regs.flags & R_CTL_REG) {
  2892.                 yyerror("please use MOVEC for control register moves");
  2893.                 break;
  2894.             }
  2895.             if(yyvsp[0].ival > 0x003F && pass == 2)
  2896.                 yyerror("warning: address operand truncated");
  2897.             w0 |= (yyvsp[0].ival & 0x3F) << 8;;
  2898.     break;}
  2899. case 253:
  2900. #line 1494 "a56.y"
  2901. {int eax = yyvsp[-6].ival, eay = yyvsp[-2].ival,
  2902.                  regx = (yyvsp[-4].regs.flags & R_AB) ? yyvsp[-4].regs.ab | 2 : yyvsp[-4].regs.xreg,
  2903.                  regy = (yyvsp[0].regs.flags & R_AB) ? yyvsp[0].regs.ab | 2 : yyvsp[0].regs.yreg;
  2904.             if((eax & 0x400) == (eay & 0x400))
  2905.                 yyerror("registers must be in opposite halves");
  2906.             if(!(yyvsp[-4].regs.flags & (R_AB | R_XREG)))
  2907.                 yyerror("invalid X move register");
  2908.             if(!(yyvsp[0].regs.flags & (R_AB | R_YREG)))
  2909.                 yyerror("invalid Y move register");
  2910.             if(yyvsp[-4].regs.flags & R_AB &&
  2911.                yyvsp[0].regs.flags & R_AB &&
  2912.                yyvsp[-4].regs.ab == yyvsp[0].regs.ab)
  2913.                 yyerror("duplicate destination register");
  2914.             w0 = w0 & 0xFF | 0xC08000;    /* both write */
  2915.             w0 |= eax & 0x1f00 | (eay & 0x300) << 5 | (eay & 0x1800) << 9 | regx << 18 | regy << 16;;
  2916.     break;}
  2917. case 254:
  2918. #line 1510 "a56.y"
  2919. {int eax = yyvsp[-6].ival, eay = yyvsp[0].ival,
  2920.                  regx = (yyvsp[-4].regs.flags & R_AB) ? yyvsp[-4].regs.ab | 2 : yyvsp[-4].regs.xreg,
  2921.                  regy = (yyvsp[-3].regs.flags & R_AB) ? yyvsp[-3].regs.ab | 2 : yyvsp[-3].regs.yreg;
  2922.             if((eax & 0x400) == (eay & 0x400))
  2923.                 yyerror("registers must be in opposite halves");
  2924.             if(!(yyvsp[-4].regs.flags & (R_AB | R_XREG)))
  2925.                 yyerror("invalid X move register");
  2926.             if(!(yyvsp[-3].regs.flags & (R_AB | R_YREG)))
  2927.                 yyerror("invalid Y move register");
  2928.             w0 = w0 & 0xFF | 0x808000;    /* X:write, Y:read */
  2929.             w0 |= eax & 0x1f00 | (eay & 0x300) << 5 | (eay & 0x1800) << 9 | regx << 18 | regy << 16;;
  2930.     break;}
  2931. case 255:
  2932. #line 1522 "a56.y"
  2933. {int eax = yyvsp[-4].ival, eay = yyvsp[-2].ival,
  2934.                  regx = (yyvsp[-7].regs.flags & R_AB) ? yyvsp[-7].regs.ab | 2 : yyvsp[-7].regs.xreg,
  2935.                  regy = (yyvsp[0].regs.flags & R_AB) ? yyvsp[0].regs.ab | 2 : yyvsp[0].regs.yreg;
  2936.             if((eax & 0x400) == (eay & 0x400))
  2937.                 yyerror("registers must be in opposite halves");
  2938.             if(!(yyvsp[-7].regs.flags & (R_AB | R_XREG)))
  2939.                 yyerror("invalid X move register");
  2940.             if(!(yyvsp[0].regs.flags & (R_AB | R_YREG)))
  2941.                 yyerror("invalid Y move register");
  2942.                   w0 = w0 & 0xFF | 0xC00000;    /* X:read, Y:write */
  2943.             w0 |= eax & 0x1f00 | (eay & 0x300) << 5 | (eay & 0x1800) << 9 | regx << 18 | regy << 16;;
  2944.     break;}
  2945. case 256:
  2946. #line 1534 "a56.y"
  2947. {int eax = yyvsp[-4].ival, eay = yyvsp[0].ival,
  2948.                  regx = (yyvsp[-7].regs.flags & R_AB) ? yyvsp[-7].regs.ab | 2 : yyvsp[-7].regs.xreg,
  2949.                  regy = (yyvsp[-3].regs.flags & R_AB) ? yyvsp[-3].regs.ab | 2 : yyvsp[-3].regs.yreg;
  2950.             if((eax & 0x400) == (eay & 0x400))
  2951.                 yyerror("registers must be in opposite halves");
  2952.             if(!(yyvsp[-7].regs.flags & (R_AB | R_XREG)))
  2953.                 yyerror("invalid X move register");
  2954.             if(!(yyvsp[-3].regs.flags & (R_AB | R_YREG)))
  2955.                 yyerror("invalid Y move register");
  2956.                   w0 = w0 & 0xFF | 0x800000;    /* both read */
  2957.             w0 |= eax & 0x1f00 | (eay & 0x300) << 5 | (eay & 0x1800) << 9 | regx << 18 | regy << 16;;
  2958.     break;}
  2959. case 257:
  2960. #line 1550 "a56.y"
  2961. {yyval.n = yyvsp[0].n;;
  2962.     break;}
  2963. case 258:
  2964. #line 1552 "a56.y"
  2965. {yyval.n = yyvsp[0].n;;
  2966.     break;}
  2967. case 259:
  2968. #line 1554 "a56.y"
  2969. {yyval.n = yyvsp[0].n;;
  2970.     break;}
  2971. case 260:
  2972. #line 1558 "a56.y"
  2973. {yyval.n = yyvsp[0].n;;
  2974.     break;}
  2975. case 261:
  2976. #line 1560 "a56.y"
  2977. {yyval.n.val.i = n2int(yyvsp[0].n) & 0xFF;
  2978.             yyval.n.type = INT;
  2979.             long_symbolic_expr = FALSE;;
  2980.     break;}
  2981. case 262:
  2982. #line 1566 "a56.y"
  2983. {yyval.n = yyvsp[0].n;;
  2984.     break;}
  2985. case 263:
  2986. #line 1571 "a56.y"
  2987. {yyval.ival = n2int(yyvsp[0].n);;
  2988.     break;}
  2989. case 264:
  2990. #line 1576 "a56.y"
  2991. {yyval.ival = n2int(yyvsp[0].n);;
  2992.     break;}
  2993. case 265:
  2994. #line 1581 "a56.y"
  2995. {yyval.ival = n2int(yyvsp[0].n);;
  2996.     break;}
  2997. case 266:
  2998. #line 1586 "a56.y"
  2999. {yyval.n = yyvsp[0].n;;
  3000.     break;}
  3001. case 267:
  3002. #line 1588 "a56.y"
  3003. {yyval.n = sym_ref(yyvsp[0].sval); free(yyvsp[0].sval);;
  3004.     break;}
  3005. case 268:
  3006. #line 1590 "a56.y"
  3007. {yyval.n.type = INT; yyval.n.val.i = yyvsp[0].ival;;
  3008.     break;}
  3009. case 269:
  3010. #line 1595 "a56.y"
  3011. {yyval.n = yyvsp[0].n;;
  3012.     break;}
  3013. case 270:
  3014. #line 1597 "a56.y"
  3015. {yyval.n = sym_ref(yyvsp[0].sval); free(yyvsp[0].sval); long_symbolic_expr++;;
  3016.     break;}
  3017. case 271:
  3018. #line 1599 "a56.y"
  3019. {yyval.n.type = INT; yyval.n.val.i = yyvsp[0].cval & 0xFFFFFF;;
  3020.     break;}
  3021. case 272:
  3022. #line 1601 "a56.y"
  3023. {yyval.n.type = INT; yyval.n.val.i = pc;;
  3024.     break;}
  3025. case 273:
  3026. #line 1606 "a56.y"
  3027. {yyval.n.type = INT; 
  3028.                 if(yyvsp[-1].n.type == INT)
  3029.                     yyval.n.val.i = yyvsp[-1].n.val.i;
  3030.                 else
  3031.                     yyval.n.val.i = yyvsp[-1].n.val.f;
  3032.             ;
  3033.     break;}
  3034. case 274:
  3035. #line 1613 "a56.y"
  3036. {yyval.n = binary_op(yyvsp[-2].n, '|', yyvsp[0].n);;
  3037.     break;}
  3038. case 275:
  3039. #line 1615 "a56.y"
  3040. {yyval.n = binary_op(yyvsp[-2].n, '^', yyvsp[0].n);;
  3041.     break;}
  3042. case 276:
  3043. #line 1617 "a56.y"
  3044. {yyval.n = binary_op(yyvsp[-2].n, '&', yyvsp[0].n);;
  3045.     break;}
  3046. case 277:
  3047. #line 1619 "a56.y"
  3048. {yyval.n = binary_op(yyvsp[-2].n, SHR, yyvsp[0].n);;
  3049.     break;}
  3050. case 278:
  3051. #line 1621 "a56.y"
  3052. {yyval.n = binary_op(yyvsp[-2].n, SHL, yyvsp[0].n);;
  3053.     break;}
  3054. case 279:
  3055. #line 1623 "a56.y"
  3056. {yyval.n = binary_op(yyvsp[-2].n, '-', yyvsp[0].n);;
  3057.     break;}
  3058. case 280:
  3059. #line 1625 "a56.y"
  3060. {yyval.n = binary_op(yyvsp[-2].n, '+', yyvsp[0].n);;
  3061.     break;}
  3062. case 281:
  3063. #line 1627 "a56.y"
  3064. {yyval.n = binary_op(yyvsp[-2].n, '%', yyvsp[0].n);;
  3065.     break;}
  3066. case 282:
  3067. #line 1629 "a56.y"
  3068. {yyval.n = binary_op(yyvsp[-2].n, '/', yyvsp[0].n);;
  3069.     break;}
  3070. case 283:
  3071. #line 1631 "a56.y"
  3072. {yyval.n = binary_op(yyvsp[-2].n, '*', yyvsp[0].n);;
  3073.     break;}
  3074. case 284:
  3075. #line 1633 "a56.y"
  3076. {yyval.n = unary_op('-', yyvsp[0].n);;
  3077.     break;}
  3078. case 285:
  3079. #line 1635 "a56.y"
  3080. {yyval.n = unary_op('~', yyvsp[0].n);;
  3081.     break;}
  3082. case 286:
  3083. #line 1637 "a56.y"
  3084. {yyval.n = yyvsp[-1].n;;
  3085.     break;}
  3086. case 287:
  3087. #line 1639 "a56.y"
  3088. {yyval.n = yyvsp[0].n;;
  3089.     break;}
  3090. }
  3091.    /* the action file gets copied in in place of this dollarsign */
  3092. #line 465 "/usr/local/gnu/lib/bison.simple"
  3093.  
  3094.   yyvsp -= yylen;
  3095.   yyssp -= yylen;
  3096. #ifdef YYLSP_NEEDED
  3097.   yylsp -= yylen;
  3098. #endif
  3099.  
  3100. #if YYDEBUG != 0
  3101.   if (yydebug)
  3102.     {
  3103.       short *ssp1 = yyss - 1;
  3104.       fprintf (stderr, "state stack now");
  3105.       while (ssp1 != yyssp)
  3106.     fprintf (stderr, " %d", *++ssp1);
  3107.       fprintf (stderr, "\n");
  3108.     }
  3109. #endif
  3110.  
  3111.   *++yyvsp = yyval;
  3112.  
  3113. #ifdef YYLSP_NEEDED
  3114.   yylsp++;
  3115.   if (yylen == 0)
  3116.     {
  3117.       yylsp->first_line = yylloc.first_line;
  3118.       yylsp->first_column = yylloc.first_column;
  3119.       yylsp->last_line = (yylsp-1)->last_line;
  3120.       yylsp->last_column = (yylsp-1)->last_column;
  3121.       yylsp->text = 0;
  3122.     }
  3123.   else
  3124.     {
  3125.       yylsp->last_line = (yylsp+yylen-1)->last_line;
  3126.       yylsp->last_column = (yylsp+yylen-1)->last_column;
  3127.     }
  3128. #endif
  3129.  
  3130.   /* Now "shift" the result of the reduction.
  3131.      Determine what state that goes to,
  3132.      based on the state we popped back to
  3133.      and the rule number reduced by.  */
  3134.  
  3135.   yyn = yyr1[yyn];
  3136.  
  3137.   yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
  3138.   if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
  3139.     yystate = yytable[yystate];
  3140.   else
  3141.     yystate = yydefgoto[yyn - YYNTBASE];
  3142.  
  3143.   goto yynewstate;
  3144.  
  3145. yyerrlab:   /* here on detecting error */
  3146.  
  3147.   if (! yyerrstatus)
  3148.     /* If not already recovering from an error, report this error.  */
  3149.     {
  3150.       ++yynerrs;
  3151.  
  3152. #ifdef YYERROR_VERBOSE
  3153.       yyn = yypact[yystate];
  3154.  
  3155.       if (yyn > YYFLAG && yyn < YYLAST)
  3156.     {
  3157.       int size = 0;
  3158.       char *msg;
  3159.       int x, count;
  3160.  
  3161.       count = 0;
  3162.       /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
  3163.       for (x = (yyn < 0 ? -yyn : 0);
  3164.            x < (sizeof(yytname) / sizeof(char *)); x++)
  3165.         if (yycheck[x + yyn] == x)
  3166.           size += strlen(yytname[x]) + 15, count++;
  3167.       msg = (char *) malloc(size + 15);
  3168.       if (msg != 0)
  3169.         {
  3170.           strcpy(msg, "parse error");
  3171.  
  3172.           if (count < 5)
  3173.         {
  3174.           count = 0;
  3175.           for (x = (yyn < 0 ? -yyn : 0);
  3176.                x < (sizeof(yytname) / sizeof(char *)); x++)
  3177.             if (yycheck[x + yyn] == x)
  3178.               {
  3179.             strcat(msg, count == 0 ? ", expecting `" : " or `");
  3180.             strcat(msg, yytname[x]);
  3181.             strcat(msg, "'");
  3182.             count++;
  3183.               }
  3184.         }
  3185.           yyerror(msg);
  3186.           free(msg);
  3187.         }
  3188.       else
  3189.         yyerror ("parse error; also virtual memory exceeded");
  3190.     }
  3191.       else
  3192. #endif /* YYERROR_VERBOSE */
  3193.     yyerror("parse error");
  3194.     }
  3195.  
  3196.   goto yyerrlab1;
  3197. yyerrlab1:   /* here on error raised explicitly by an action */
  3198.  
  3199.   if (yyerrstatus == 3)
  3200.     {
  3201.       /* if just tried and failed to reuse lookahead token after an error, discard it.  */
  3202.  
  3203.       /* return failure if at end of input */
  3204.       if (yychar == YYEOF)
  3205.     YYABORT;
  3206.  
  3207. #if YYDEBUG != 0
  3208.       if (yydebug)
  3209.     fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
  3210. #endif
  3211.  
  3212.       yychar = YYEMPTY;
  3213.     }
  3214.  
  3215.   /* Else will try to reuse lookahead token
  3216.      after shifting the error token.  */
  3217.  
  3218.   yyerrstatus = 3;        /* Each real token shifted decrements this */
  3219.  
  3220.   goto yyerrhandle;
  3221.  
  3222. yyerrdefault:  /* current state does not do anything special for the error token. */
  3223.  
  3224. #if 0
  3225.   /* This is wrong; only states that explicitly want error tokens
  3226.      should shift them.  */
  3227.   yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
  3228.   if (yyn) goto yydefault;
  3229. #endif
  3230.  
  3231. yyerrpop:   /* pop the current state because it cannot handle the error token */
  3232.  
  3233.   if (yyssp == yyss) YYABORT;
  3234.   yyvsp--;
  3235.   yystate = *--yyssp;
  3236. #ifdef YYLSP_NEEDED
  3237.   yylsp--;
  3238. #endif
  3239.  
  3240. #if YYDEBUG != 0
  3241.   if (yydebug)
  3242.     {
  3243.       short *ssp1 = yyss - 1;
  3244.       fprintf (stderr, "Error: state stack now");
  3245.       while (ssp1 != yyssp)
  3246.     fprintf (stderr, " %d", *++ssp1);
  3247.       fprintf (stderr, "\n");
  3248.     }
  3249. #endif
  3250.  
  3251. yyerrhandle:
  3252.  
  3253.   yyn = yypact[yystate];
  3254.   if (yyn == YYFLAG)
  3255.     goto yyerrdefault;
  3256.  
  3257.   yyn += YYTERROR;
  3258.   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
  3259.     goto yyerrdefault;
  3260.  
  3261.   yyn = yytable[yyn];
  3262.   if (yyn < 0)
  3263.     {
  3264.       if (yyn == YYFLAG)
  3265.     goto yyerrpop;
  3266.       yyn = -yyn;
  3267.       goto yyreduce;
  3268.     }
  3269.   else if (yyn == 0)
  3270.     goto yyerrpop;
  3271.  
  3272.   if (yyn == YYFINAL)
  3273.     YYACCEPT;
  3274.  
  3275. #if YYDEBUG != 0
  3276.   if (yydebug)
  3277.     fprintf(stderr, "Shifting error token, ");
  3278. #endif
  3279.  
  3280.   *++yyvsp = yylval;
  3281. #ifdef YYLSP_NEEDED
  3282.   *++yylsp = yylloc;
  3283. #endif
  3284.  
  3285.   yystate = yyn;
  3286.   goto yynewstate;
  3287. }
  3288. #line 1644 "a56.y"
  3289.  
  3290.  
  3291. #include <stdio.h>
  3292.  
  3293. int yydebug;
  3294.  
  3295. struct n binary_op(a1, op, a2)
  3296. struct n a1, a2;
  3297. int op;
  3298. {
  3299.     struct n result;
  3300.  
  3301.     if(a1.type == UNDEF || a2.type == UNDEF) {
  3302.         result.type = UNDEF;
  3303.         return result;
  3304.     }
  3305.  
  3306.     /* promote to float automatically */
  3307.  
  3308.     if(a1.type != a2.type) {
  3309.         if(a1.type == INT) {
  3310.             a1.val.f = a1.val.i;        /* truncate */
  3311.             a1.type = FLT;
  3312.         } else {
  3313.             a2.val.f = a2.val.i;        /* truncate */
  3314.         }
  3315.     }
  3316.     result.type = a1.type;
  3317.  
  3318.     /* do the op */
  3319.  
  3320.     if(result.type == INT) {
  3321.         switch(op) {
  3322.             case '+':        result.val.i = a1.val.i + a2.val.i; break;
  3323.             case '-':        result.val.i = a1.val.i - a2.val.i; break;
  3324.             case '*':        result.val.i = a1.val.i * a2.val.i; break;
  3325.             case '/':        result.val.i = a1.val.i / a2.val.i; break;
  3326.             case '%':        result.val.i = a1.val.i % a2.val.i; break;
  3327.             case SHL:        result.val.i = a1.val.i << a2.val.i; break;
  3328.             case SHR:        result.val.i = a1.val.i >> a2.val.i; break;
  3329.             case '|':        result.val.i = a1.val.i | a2.val.i; break;
  3330.             case '&':        result.val.i = a1.val.i & a2.val.i; break;
  3331.             case '^':        result.val.i = a1.val.i ^ a2.val.i; break;
  3332.         }
  3333.     } else {
  3334.         switch(op) {
  3335.             case '+':        result.val.f = a1.val.f + a2.val.f; break;
  3336.             case '-':        result.val.f = a1.val.f - a2.val.f; break;
  3337.             case '*':        result.val.f = a1.val.f * a2.val.f; break;
  3338.             case '/':        result.val.f = a1.val.f / a2.val.f; break;
  3339.             case '%':        result.val.f = (int)a1.val.f % (int)a2.val.f; break;
  3340.             case SHL:        result.val.f = (int)a1.val.f << (int)a2.val.f; break;
  3341.             case SHR:        result.val.f = (int)a1.val.f >> (int)a2.val.f; break;
  3342.             case '|':        result.val.f = (int)a1.val.f | (int)a2.val.f; break;
  3343.             case '&':        result.val.f = (int)a1.val.f & (int)a2.val.f; break;
  3344.             case '^':        result.val.f = (int)a1.val.f ^ (int)a2.val.f; break;
  3345.         }
  3346.     }
  3347.  
  3348.     return result;
  3349. }
  3350.  
  3351. struct n unary_op(op, a1)
  3352. int op;
  3353. struct n a1;
  3354. {
  3355.     struct n result;
  3356.  
  3357.     if(a1.type == UNDEF) {
  3358.         result.type = UNDEF;
  3359.         return result;
  3360.     }
  3361.  
  3362.     result.type = a1.type;
  3363.  
  3364.     /* do the op */
  3365.  
  3366.     if(result.type == INT) {
  3367.         switch(op) {
  3368.             case '-':        result.val.i = -a1.val.i; break;
  3369.             case '~':        result.val.i = ~a1.val.i; break;
  3370.         }
  3371.     } else {
  3372.         switch(op) {
  3373.             case '-':        result.val.f = -a1.val.f; break;
  3374.             case '~':        result.val.f = ~(int)a1.val.f; break;
  3375.         }
  3376.     }
  3377.  
  3378.     return result;
  3379. }
  3380.  
  3381. n2int(n)
  3382. struct n n;
  3383. {
  3384.     if(n.type == UNDEF)
  3385.         return UNDEF;
  3386.     else if(n.type == INT)
  3387.         return n.val.i;
  3388.     else
  3389.         return n.val.f;
  3390. }
  3391.  
  3392. n2frac(n)
  3393. struct n n;
  3394. {
  3395.     double adval = n.val.f >= 0.0 ? n.val.f : -n.val.f;
  3396.  
  3397.     if(n.type == UNDEF)
  3398.         return UNDEF;
  3399.     else if(n.type == INT)
  3400.         return n.val.i;
  3401.     else if(n.val.f == -1.0)
  3402.         return 0x800000;
  3403.  
  3404.     adval -= (double)(int)adval;
  3405.     adval *= (double)0x800000;
  3406.     adval += 0.5;
  3407.  
  3408.     if(n.val.f >= 0.0)
  3409.         return adval;
  3410.     else
  3411.         return -adval;
  3412. }
  3413.  
  3414. extern struct {int n; char *name;} tok_tab[];
  3415. extern int n_tok;
  3416.  
  3417. char *tok_print(tok)
  3418. int tok;
  3419. {
  3420.     int i;
  3421.     static char buf[32];
  3422.  
  3423.     if(tok < 256) {
  3424.         sprintf(buf, tok < ' ' ? "\\z%02X" : "%c", tok & 0xFF);
  3425.         return buf;
  3426.     } else {
  3427.         for(i = 0; i < n_tok; i++) {
  3428.             if(tok == tok_tab[i].n)
  3429.                 return tok_tab[i].name;
  3430.         }
  3431.     }
  3432.     return "*bogus*";
  3433. }
  3434.  
  3435. yyerror(s, a0, a1, a2, a3)
  3436. char *s, *a0, *a1, *a2, *a3;
  3437. {
  3438.     extern int error;
  3439.     char buf[1024];
  3440.  
  3441.     error++;
  3442.     sprintf(buf, s, a0, a1, a2, a3);
  3443.  
  3444.     if(pass == 2) {
  3445.         fprintf(stderr, "%s: line %d: %s (tok=%s)\n", curfile, curline,
  3446.             buf, tok_print(yychar));
  3447.         fprintf(stderr, "%s\n", cur_line);
  3448.         printf("%s: line %d: %s (tok=%s)\n", curfile, curline,
  3449.             buf, tok_print(yychar));
  3450.     }
  3451. }
  3452.  
  3453. char *luntab(s)
  3454. char *s;
  3455. {
  3456.     static char buf[1024];
  3457.     int p;
  3458.  
  3459.     strcpy(buf, s);
  3460.  
  3461.     untab(buf);
  3462.     p = strlen(buf);
  3463.  
  3464.     if(buf[p - 1] == '\n')
  3465.         buf[p - 1] = '\0';
  3466.  
  3467.     return buf;
  3468. }
  3469.